Универсальные ограничения на производные классы

Этот цикл должен сделать это.

 for(var key in obj){
       channels[key].status = obj[key]
    }
8
задан Bart 17 October 2016 в 18:18
поделиться

3 ответа

Ну, Вы могли изменить Метод на:

public static T Method<T,U>() where T : ClassA<U> where U : T

Это помогает вообще? Это не полезно, если Вы не можете изменить Метод, конечно...

6
ответ дан 5 December 2019 в 19:04
поделиться

Нет. Необходимо изменить или перенести этот метод.

Вот причина.

ClassC наследовался ClassB, который наследовался ClassA (ClassB)

ClassC не наследовался ClassA (ClassC)

Никакой ребенок ClassB не наследуется ClassA (дочерний класс), потому что они вместо этого наследовались ClassB, и ClassB не наследовался ClassA (дочерний класс).

Универсальные типы являются инвариантными.

2
ответ дан 5 December 2019 в 19:04
поделиться

В большинстве случаев возможно решить этот сценарий при наличии основного неуниверсального абстрактного класса:

public abstract class BasicClassA
{
}

public class ClassA<T> : BasicClassA
{
}

public class ClassB : ClassA<ClassB>
{
}

public class ClassC : ClassB
{
}

public static T Method<T>() where T : BasicClassA
{
    return null;
}

Ваш пробег может варьироваться, все же.

1
ответ дан 5 December 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: