Frage

Ich habe eine abstract klasse, die eine Typbeschränkung hat.Aber ich möchte auch das machen abstract klasse implementiert eine Schnittstelle.

Z.B:

public abstract class PostEvent<TPost> : IDomainEvent, where TPost : Post, new()

Was nicht kompiliert wird.

Ich will das nicht:

public abstract class PostEvent<TPost> where TPost : Post, IDomainEvent, new()

Denn das bedeutet TPost : IDomainEvent

Ich will PostEvent : IDomainEvent

Was ist die Syntax?

War es hilfreich?

Lösung

Versuchen Sie dies:

public abstract class PostEvent<TPost> : IDomainEvent where TPost : Post, new() 

Sie möchten kein Komma zwischen der Schnittstellenliste und den generischen Einschränkungen.

Andere Tipps

Sie müssen es tatsächlich implementieren (Sie können die Implementierung nicht verlassen rein zu den konkreten Typen - es muss wissen, wo ich anfangen soll):

public abstract class PostEvent<TPost> : IDomainEvent
    where TPost : Post, new()
{
    public abstract void SomeInterfaceMethod();
}

Sie können auch eine explizite Schnittstellenimplementierung und eine geschützte abstrakte Methode verwenden, wenn Sie Otis nicht für die öffentliche API verwenden möchten:

public abstract class PostEvent<TPost> : IDomainEvent
    where TPost : Post, new()
{
    protected abstract void SomeInterfaceMethod();
    void IDomainEvent.SomeInterfaceMethod() {
        SomeInterfaceMethod(); // proxy to the protected abstract version
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top