Здесь мы имеем простой класс herarchy и использование дженериков с type constraint из new()
Generic тип ограничения нового() и абстрактный базовый класс
public abstract class Base
{
}
public class Derived : Base
{
}
public class TestClass
{
private void DoSomething<T>(T arg) where T : new()
{
}
public void TestMethod()
{
Derived d1 = new Derived();
DoSomething(d1); // compiles
Base d2 = new Derived();
DoSomething(d2); // compile error
}
}
код не удается скомпилировать в указанной строке, ошибка:
«Base» должна быть не абстрактный типом с конструктором общественным того, без параметров, чтобы использовать его в качестве параметра «T» в универсальном типе или методе «Foo.DoSomething (Т)»
Эта ошибка ясна и имеет смысл, но я надеялся, что компилятор поймет, что все производные от Base
(которые могут быть созданы на данный момент) имеют открытый конструктор без параметров.
Будет ли это теоретически возможным для компилятора?
Эта строка беспокоит меня более «не абстрактным типом», чем предложение конструктора без параметров. –