7 Stimmen

Warum kann ich nicht erzwingen, dass abgeleitete Klassen parameterlose Konstruktoren haben?

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().

0voto

Marcal Punkte 1

Zuerst "new()" aus dem Schlüsselwort "where" der Klasse "Foo" entfernen Danach muss der Konstruktor geändert werden als

public foo()
{
    _t = Activator.CreateInstance<T>();
}

Bei mir hat es funktioniert!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X