Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 超载+;枚举数运算符_C#_C# 2.0 - Fatal编程技术网

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