Próbuję wykonać następujące czynności:Dlaczego nie mogę wymusić klas pochodnych na konstruktorach bez parametrów?
class Program
{
static void Main(string[] args)
{
foo<baz> fooObject = new foo<baz>();
AnotherClass<baz> _baz = new AnotherClass<baz>();
_baz.testMethod(fooObject);
}
}
public class AnotherClass<T> where T : bar
{
public void testMethod(foo<T> dummy)
{
foobar = dummy;
}
private foo<T> foobar = null;
}
public class foo<T> where T : bar, new()
{
public foo()
{
_t = new T();
}
private T _t;
}
public abstract class bar
{
public abstract void someMethod();
// Some implementation
}
public class baz : bar
{
public override void someMethod()
{
//Implementation
}
}
I pojawia się błąd wyjaśniając, że „T” musi być non-abstrakcyjny typ z konstruktora bez parametrów publicznej w celu wykorzystania go jako parametru „T” rodzaj ogólny lub metoda. W pełni rozumiem, dlaczego tak się dzieje, a także rozumiem, że mogłem przekazać wstępnie zainicjowany obiekt typu "T" jako argument konstruktora, aby uniknąć konieczności "nowego" go, ale czy jest jakiś sposób obejścia tego? w jaki sposób wymusić klas, które pochodzą z "bar" do dostarczania konstruktorów bez parametrów?
Naprawiono - Brakowało mi "nowego()" ograniczenia w programie AnotherClass().
Dzięki, to chyba naprawiło! –