Приведение реализации интерфейса B к реализации интерфейса A - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь запустить приведенный ниже код. Я хочу привести объект класса A к объекту класса B, но я получаю ошибку. Теоретически, A является частью B, поэтому я не могу понять, почему это не сработает.

Я знаю, что это приведение означает потерю некоторых данных, но это именно то, что я хочу. Есть ли способ запустить это?

public class Program
{
    public static void Main()
    {
        var b = new B();
        var a = (A)b; //Error: Cannot convert type
    }
}

public interface IA{}

public interface IB : IA{}

public class A : IA{}

public class B : IB{}

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

Понятно, что B не относится к типу A, и наоборот:

enter image description here

Невозможно привести B к A. Вы можете использовать только IBили типы IA.

1 голос
/ 05 марта 2019

Вы можете решить эту проблему несколькими способами, одним из которых является то, как сказал Гилад Грин в своем ответе, или также реализовав метод преобразования:

        public static implicit operator A(B b)
        {
            //your code to convert from B to A
        }

        public static implicit operator B(A a)
        {
            //your code to convert from A to B
        }

Поскольку B реализует как IA, так и IB, вы не можете напрямую разыгратьдруг от друга, если в этом ответе не реализовано что-то вроде фрагмента кода.

...