Параметр типового типу класу C # (неможливо неявно конвертувати)

Сценарій:

class A { }

class B : A { }

class C where T: A { }

Питання

Why cant C = C when B is a subclass of A? it throws the "cannot implicitly convert" error

Дякую

--UPDATE-- can i create an implicit method for that C would recognize C?

2
Будь ласка, перегляньте stackoverflow.com/questions/674715/net-casting-generic- список та stackoverflow. ru/questions/1133356/& hellip; . Ключові слова, які ви шукаєте, - коваріація та контраваріація :)
додано Автор RB., джерело
Будь ласка, перегляньте stackoverflow.com/questions/674715/net-casting-generic- список та stackoverflow. ru/questions/1133356/& hellip; . Ключові слова, які ви шукаєте, - коваріація та контраваріація :)
додано Автор RB., джерело
Що ви маєте на увазі з C = C?
додано Автор Michel Keijzers, джерело
Будь ласка, перегляньте своє запитання. Що означає "Чому б не користуватися C = C" ? Надайте фрагмент коду компіляції, який дозволить нам відтворити вашу проблему.
додано Автор Tim Schmelter, джерело
ви також можете знайти інформацію тут
додано Автор Default, джерело
ви також можете знайти інформацію тут
додано Автор Default, джерело
Біт довго читається, але ваш відповідь тут Це пов'язано з C#, що не підтримує коваріацію для генериків.
додано Автор Karthik T, джерело
Біт довго читається, але ваш відповідь тут Це пов'язано з C#, що не підтримує коваріацію для генериків.
додано Автор Karthik T, джерело
Вам не потрібні такі дужки для початку: class C де T: A {}
додано Автор Codesleuth, джерело
Вам не потрібні такі дужки для початку: class C де T: A {}
додано Автор Codesleuth, джерело
вибач забув додати кодові блоки
додано Автор Milo Cabs, джерело
вибач забув додати кодові блоки
додано Автор Milo Cabs, джерело

8 Відповіді

Використовуйте альтернативний варіант , якщо вам потрібно це зробити, а також тому, що спільного варіанту просто працюйте лише з інтерфейсом та делегуванням , щоб визначити інтерфейс з магічним словом out замість класу:

interface IC where T : A
{
}

Отже, ви можете призначити, як хочете:

class CA : IC
{}

class CB : IC
{ }

IC x = new CA();
IC y = new CB();

x = y;

Використовуйте альтернативний варіант , якщо вам потрібно це зробити, а також тому, що спільного варіанту просто працюйте лише з інтерфейсом та делегуванням , щоб визначити інтерфейс з магічним словом out замість класу:

interface IC where T : A
{
}

Отже, ви можете призначити, як хочете:

class CA : IC
{}

class CB : IC
{ }

IC x = new CA();
IC y = new CB();

x = y;

What you are asking for is Covariance and Contravariance in Generics which is only applicaple for interfaces and delegates. You can check this

You can do the following in Framework >= 4:

interface IC where T : A

class C : IC  where T : A

IC ica = new C();

For your case you should extract an interface for class C

What you are asking for is Covariance and Contravariance in Generics which is only applicaple for interfaces and delegates. You can check this

You can do the following in Framework >= 4:

interface IC where T : A

class C : IC  where T : A

IC ica = new C();

For your case you should extract an interface for class C

var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug