Comment spécifier la contrainte de type et l'héritage lors de la déclaration de la classe ?
-
12-12-2019 - |
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 ?
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