Ich versuche, Folgendes zu tun:
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
}
}
Und ich erhalte eine Fehlermeldung, die besagt, dass "T" ein nicht-abstrakter Typ mit einem öffentlichen parameterlosen Konstruktor sein muss, um ihn als Parameter "T" im generischen Typ oder in der generischen Methode verwenden zu können. Ich verstehe vollkommen, warum das so sein muss, und ich verstehe auch, dass ich ein vorinitialisiertes Objekt vom Typ "T" als Konstruktorargument übergeben könnte, um zu vermeiden, dass ich es "neu" erstellen muss, aber gibt es eine Möglichkeit, dies zu umgehen? Gibt es eine Möglichkeit, Klassen, die von "bar" abgeleitet sind, dazu zu zwingen, parameterlose Konstruktoren bereitzustellen?
Festgelegt - Mir fehlte eine 'new()'-Beschränkung für AnotherClass().