2017-05-26 3 views
0

Dungeons &ドラゴン文字を一括して生成するC#アプリケーションを作成しています。しかし、私がキャラクターのパラメータに "ボーナス"のコンセプトに遭遇したとき、私は最初に顔を壁に打ちました。ボーナスのメソッドのジェネリックタイプを正しく制約すると、私はエスケープします。ここで私が持っているものの一例である:関連していないC#クラスの型制約を実装する

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; } 
} 

私が直面している問題は、ユーザーの観点から、私は、ユーザーが「このレースはインテリジェンスに+2のボーナスを与える」を追加できるようにしたいということです。残念ながら、能力スコア「Intelligence」は、それがキャラクタに関連付けられるまでValueプロパティを持たないので、IBonusable制約が問題になります。

IBonusableのvalueプロパティと同じ型にIBonusのvalueプロパティを制限することができます。これは、ボーナスを特定の文字に直接結びつけることなく(これは上記の実装では起こりますが、 IBonusableを継承するICharacterAbilityScoreを使用します)。

これを実現するためのインターフェイスのみの方法はありますか、具体的な実装を定義するときにこの制約を追加する必要がありますか?

また、最初のEFコードを使用してデータベースを構築する予定です。

答えて

0

私はあなたの質問を正しく理解しているかわかりませんが、これは私の理解によるものです。

public interface IAbilityScore : IBaseEntity 
{ 
    string Name { get; set; } 
} 

public interface IBonus<T> 
{ 
    T Value { get; set; } 
} 

public interface IBonusable<T> 
{ 
    T Value { get; set; } 
} 

public interface ICharacterAbilityScore<T> : IBaseEntity, IBonusable<T>,IBonus<T> 
{ 
    ICharacter Character { get; set; } 
    IAbilityScore AbilityScore { get; set; } 
    bool IsSaveProficient { get; set; } 
} 
関連する問題