Почему общее ограничение типа в C# дает различные результаты для моего примера?C#

Место общения программистов C#
Anonymous
Почему общее ограничение типа в C# дает различные результаты для моего примера?

Сообщение Anonymous »

Я изучаю общие ограничения типа в C#. Когда я посмотрел на пример ограничения типа класса, я увидел, что выполнение переопределенного метода в полученном классе зависит от кода этого метода в базовом классе. Я не понимаю, почему. < /P>
Вот мой пример: < /p>
B b = new B(10,20);
Print(b);
void Print(T t) where T : A
{
Console.WriteLine(t.Get());
}
class A
{
protected int a;
public A(int a){this.a = a;}
public A Get()
{
return this;
// return new A(a);
}
public override string ToString(){ return $"{a}"; }
}
class B : A
{
int b;
public B(int a, int b) : base(a){this.b = b;}
public B Get()
{
return this;
}
public override string ToString(){return $"{a}, {b}";}
}
< /code>
В таком варианте будет напечатан результат: «10, 20».
Но если мы заменим «вернуть это» с «вернуть новое a (a)» в методе get () < /code> базового класса A, в таком случае результат будет «10». Может, кто -то может дать мне ответ, почему? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/795 ... lts-for-my

Вернуться в «C#»