Question

j'ai un abstract classe qui a une contrainte de type.Mais je veux aussi faire le abstract la classe implémente une interface.

Par exemple:

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

Ce qui ne compile pas.

Je ne veux pas de ça :

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

Parce que ça veut dire TPost : IDomainEvent

Je veux PostEvent : IDomainEvent

Quelle est la syntaxe ?

Était-ce utile?

La solution

Essaye ça:

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

Vous ne voulez pas de virgule entre la liste des interfaces et les contraintes génériques.

Autres conseils

Vous devez réellement l'implémenter (vous ne pouvez pas laisser l'implémentation purement aux types concrets - il faut savoir par où commencer) :

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

Vous pouvez également utiliser une implémentation d'interface explicite et une méthode abstraite protégée si vous ne voulez pas qu'Otis soit sur l'API publique :

public abstract class PostEvent<TPost> : IDomainEvent
    where TPost : Post, new()
{
    protected abstract void SomeInterfaceMethod();
    void IDomainEvent.SomeInterfaceMethod() {
        SomeInterfaceMethod(); // proxy to the protected abstract version
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top