2017-05-26 28 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; } 
}