C# generi c Cast Conversion - PullRequest
       7

C# generi c Cast Conversion

3 голосов
/ 13 января 2020

У меня есть проблема приведения, которую я не могу решить:

в функции инициализации ClassA, я хочу передать 'this' в качестве параметра, но компилятор не может привести от ClassA<T, U> к ClassA<ClassB<U>, U>, зная, что они одинаковы (where T : ClassB<U>).

public class ClassA<T, U> : MonoBehaviour where T : ClassB<U>
{
    public void initialize()
    {
        T item =...
        item.Initialize(this); // Cannot implicitly convert from ClassA<T, U> to ClassA<ClassB<U>, U>.
    }
}

public class ClassB<T> : MonoBehaviour
{
    public virtual void Initialize(ClassA<ClassB<T>, T> mgr, T data)
    {
        ...
    }
}

Спасибо.

Ответы [ 2 ]

10 голосов
/ 13 января 2020

Рассмотрим: Elephant : Animal; это не означает , что означает List<Elephant> : List<Animal>, и вы не можете разыграть List<Elephant> до List<Animal> по многим причинам (включая: это позволит вам Add(monkey) до List<Elephant> после приведения к List<Animal>, потому что Monkey : Animal). Здесь то же самое, концептуально.

0 голосов
/ 13 января 2020

Это не работает для классов. Это работает, только если ClassB был интерфейсом с параметром типа out следующим образом:

public interface IInterfaceB<out T>
{
   …
}

Однако параметр типа out означает, что вы можете использовать только параметр типа T для возвращаемых значений в вашем IInterfaceB членах интерфейса, а не для параметров.

...