C# 超载+;枚举数运算符
我有一个接口,在本例中我们将调用C# 超载+;枚举数运算符,c#,c#-2.0,C#,C# 2.0,我有一个接口,在本例中我们将调用IMagicPerson public interface class IMagicPerson : IPerson { IEnumerable<MagicPower> Powers { get; } } 那么,在哪里以及如何以这种方式重载+操作符呢?我需要能够将MagicPower添加到枚举器或另一个MagicPower。两者都将返回一个IEnumerator 我还将接受关于实现此目标的其他方法的其他建议,其中不包括重载此运算符 注意事项:
IMagicPerson
public interface class IMagicPerson : IPerson
{
IEnumerable<MagicPower> Powers { get; }
}
那么,在哪里以及如何以这种方式重载+
操作符呢?我需要能够将MagicPower
添加到枚举器或另一个MagicPower
。两者都将返回一个IEnumerator
我还将接受关于实现此目标的其他方法的其他建议,其中不包括重载此运算符
注意事项:
请记住,我使用的是C#2.0,因此扩展方法不起作用(尽管我正强烈考虑为此升级此服务器)
另一个复杂问题是,尽管每种类型的MagicPerson
的异能通常相同,但也有一些异能只能在某些情况下使用(例如,一些巫师在麻瓜世界中不能使用异能:D)。我不是问怎么做,我可以使用if
语句或在其他地方添加这些属性。只是让人们知道完全静态的解决方案是行不通的
另一件需要注意的事情是,我没有访问IMagicPerson接口的权限,因此我甚至无法让属性返回继承IEnumerable的新类,并将重载运算符放在其中(或者我可以吗?)
谢谢 在任何版本中,完全不可能覆盖接口上的运算符
您应该创建一个静态
方法,该方法采用参数IEnumerable[]
并产生返回
s所有这些方法都使用双foreach
来建议我自己问题的答案:
我可以为每个魔术师创建一个基类:
public abstract class MagicPerson : IMagicPerson
{
protected List<MagicPower> powers;
public IEnumerable<MagicPower> Powers { get { return powers; } }
}
公共抽象类MagicPerson:IMagicPerson
{
受保护名单权力;
公共IEnumerable Powers{get{return Powers;}}
}
然后在派生类的构造函数中添加到这个powers
列表中。但是我拥有MagicPower
类,我可以为它重写操作符吗?此外,您的解决方案与作为示例的问题中给出的MagicPowerCollection
类完全相同。这并没有真正起作用,因为我在问题底部的注释部分给出了原因。我的意思是使用迭代器方法而不是类。我不明白这为什么行不通;你的第二个注意事项不清楚。静态方法比一个全新的类要干净得多。抱歉,这张便条不清楚(想不出更好的表达方式)。在您的解决方案中,我必须在其他地方为该类的powers声明另一个枚举器,以前我是作为静态方法这样做的,但是我可以返回CombinePowers(base.powers,GetMyPowers())
并为每个类创建GetMyPowers?如果我在一段代码中看到该语法,我不知道它想要实现什么。我认为,如果需要向可能延迟看到代码的人解释这种新语法,那么就不值得花时间来使用它。这就是我问这种语法是否“糟糕”的原因之一,并说我会接受其他不包括重载运算符的解决方案。您将如何实现这一点?是否有人知道这将使用比yield return
语句更多的资源?
public abstract class MagicPerson : IMagicPerson
{
protected List<MagicPower> powers;
public IEnumerable<MagicPower> Powers { get { return powers; } }
}