2017-05-26 27 views
0

我正在寫一個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加值智能」。不幸的是,能力分數「智力」在與角色關聯之前不會具有Value屬性,從而導致IBonusable約束成爲問題。

我希望能夠將IBonus的value屬性約束爲與IBonusable項目的value屬性相同的類型,而無需將獎勵直接綁定到特定字符(這將在我的上述實現中發生,與ICharacterAbilityScore inherting IBonusable)。

有沒有實現這一點的唯一接口,方法,否則我將不得不增加時,我定義了具體的實現這一約束?

另外,我打算使用代碼優先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; } 
}