Tutaj mamy prostą klasę herarchy i korzystanie z leków generycznych z type constraint od new()
Generic typu ograniczenie nowych() i abstrakcyjnym bazowej klasy
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
}
}
kod nie skompilować na wskazanej linii, z błąd z:
„bazy” musi być non-abstrakcyjny typ z publicznego konstruktora bez parametrów w celu wykorzystania go jako parametr „T” w ogólnym typie lub metodzie „Foo.DoSomething (T)”
Ten błąd jest jasny i ma sens, ale miałem nadzieję, że kompilator zrozumie, że wszystkie wyprowadzenia z Base
(które mogą być tworzone w tym momencie) mają publiczny konstruktor bez parametrów.
Czy teoretycznie jest to możliwe dla kompilatora?
Ta linia martwi mnie bardziej o "typ nie abstrakcyjny" niż klauzula konstruktora bez parametrów. –