我有一個接口,在這個例子中,我們會打電話給IMagicPerson
重載+操作統計員
public interface class IMagicPerson : IPerson
{
IEnumerable<MagicPower> Powers { get; }
}
有幾件事情繼承IMagicPerson
,然後是一些其他類從中獲得太大,等等,引起一些相當長的派生體系。這些都需要能夠聲明這些權力的一部分,但也必須使用派生類的權力。
我已經玩過各種各樣的做法。我用:
- 一個
MagicPowerCollection
類,它可以通過多種MagicPower枚舉枚舉,好像它是一個枚舉(使用yield return
報表),並以此來增加一個private static MagicPower[]
到base.Powers
- 使用
MagicPowerCollection
的另一個構造可以添加單個列強枚舉結束(再次使用yield returns
)
但我真的喜歡去了解這個問題的方法是通過
- 超載的IEnumerable的+運營商允許添加更多的普查員或單國
這是一個糟糕的方式做到這一點?我認爲這看起來相當不錯。例如,我可以有:
public class Wizard : IMagicPerson
{
public override IEnumerable<MagicPower> Powers
{
get
{
AllPowers.AntiGravity + AllPowers.BroomStick;
//note: AllPowers, in this example, is a static class and all the properties return a MagicPower or type derived from MagicPower
}
}
}
public class EvilWizard : Wizard
{
public override IEnumerable<MagicPower> Powers
{
get
{
return base.Powers + AllPowers.InstantDeath + AllPowers.MindControl;
}
}
}
所以,在這裏,我怎麼會以這樣的方式重載+
操作?我需要能夠將MagicPower
添加到統計員或另一個MagicPower
。兩者都將返回IEnumerator<MagicPower>
。
我也會接受關於其他實現此方法的其他建議,其中不包括重載此運算符。
注:
裸記住我使用C#2.0,所以擴展方法是不行的(雖然我強烈考慮升級該服務器只爲這)。
另一個複雜的是,雖然權力通常對於每種類型的MagicPerson
相同,也有可以僅在某些情況下使用(例如,某些Wizards
不能在麻瓜世界使用權力某些權力:d)。我不問如何做到這一點,我只能使用if
語句或在其他地方添加這些屬性。讓人們知道一個完全靜態的解決方案是行不通的。
另一件事記裸露的是,我沒有訪問IMagicPerson接口,所以我甚至無法獲得屬性返回繼承IEnumerable的一個新的類,並把重載運營商在那裏(或我可以嗎?)
謝謝!!
如果我在一段代碼中看到了這種語法,我不知道它試圖達到什麼目的。如果需要向可能會看到代碼的人解釋這個新語法,我認爲不值得花費這些時間。 – unholysampler
這是我詢問這是否「壞」的原因之一,並表示我會接受其他解決方案,但不包括超載運營商。你會如何實現這一目標? – Connell