J'écris une application C# qui générera des Donjons & Dragons en vrac. Cependant quand j'ai rencontré le concept d'un "bonus" à un paramètre de caractère, j'ai couru le visage d'abord dans un mur. Des types génériques correctement contraignants pour la méthode du bonus m'échappent. Voici un exemple de ce que j'ai:Implémentation de la contrainte de type pour une classe C# non associée
public interface IAbilityScore : IBaseEntity
{
string Name { get; set; }
}
public interface IBonus<T,K> where T : IBonusable<K>
{
K Value { get; set; }
}
public interface IBonusable<T>
{
T Value { get; set; }
}
public interface ICharacterAbilityScore : IBaseEntity, IBonusable<int>
{
ICharacter Character { get; set; }
IAbilityScore AbilityScore { get; set; }
bool IsSaveProficient { get; set; }
}
Le problème est que je fais face à un point de vue utilisateur, je veux que l'utilisateur soit en mesure d'ajouter « Cette course donne un bonus de +2 à l'Intelligence ». Malheureusement, le score de capacité "Intelligence" n'aura pas de propriété Value tant qu'il n'est pas associé à un caractère, ce qui pose un problème à la contrainte IBonusable. J'aimerais pouvoir contraindre la propriété value de l'IBonus au même type que la propriété value de l'item IBonusable sans avoir à lier le bonus directement à un caractère spécifique (ce qui arriverait dans ma précédente implémentation, avec ICharacterAbilityScore héritant IBonusable).
Existe-t-il une méthode d'interface uniquement pour accomplir cela, ou devrais-je ajouter cette contrainte lorsque je définis les implémentations concrètes?
Aussi, je prévois d'utiliser d'abord le code EF pour construire la base de données, si cela affecte la réponse.