2017-03-13 23 views
-1

请帮助我理解为什么C#不允许实际类有一个运营商或我可能在我的课的定义做。C#操作符定义只在抽象类可用

的号召创建Errd的作品,因为它是一个抽象类。 但是,你可以/为什么你不能在实际的课堂中拥有一个操作员,就像在我的Errd定义的注释版本中一样?

有什么在Errd的说出来的版本,我可以修复,使Errd errd = eq;工作?

我想我应该添加IDE错误。 当Errd没有被定义为一个抽象的IDE becrys“

不能隐式转换公式来Errd。一个显式转换存在。 是否缺少强制转换?)

但是一个公式是什么像Errd用于铸造不会为你着想的响应意义。

Eq eq = new Eq(); 
Copa copa = new Copa(eq); 
Errd errd = eq; 

public class Copa { 
    public Copa(Eq e) { 
     //.. do something 
    } 
} 

public class Erd : Errd { .... } 
public adstract class Errd { 
     public static implicit operator(Eq e) { 
      Erd q = new Erd(); 
      //.. do something 
      return q; 
     } 
} 

/* 
public class Errd { 
     public static implicit operator(Eq e) { 
      Errd q = new Errd(); 
      //.. do something 
      return q; 
     } 
} 
*/ 

感谢。

+2

因为你有两个类型完全相同的名字('Errd'和'Errd')?如果不是这样,那么更新你的代码,因为很难看到你正在努力完成上述任务,至少要编译它。此外,如果您收到错误或异常,那么如果您包含该信息将会有所帮助。 – Igor

+2

Errd的第二个定义被注释掉了。 – Steve

+2

请包括[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。另请阅读[我如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)。另请参阅[覆盖运算符==]一节(https://msdn.microsoft.com/ru-ru/library/ms173147(v = vs80).aspx),并确保您的语法正确(不是)。 – Igor

回答

2

您必须添加要将隐式转换重载的类的类型。在你的例子中,它看起来像这样:

public static implicit operator Errd(Eq e) 

注意Errd。

this msdn article的详细信息,超载显性和隐性的铸造。

+1

哦,真的吗?!?!你是对的,我的不好。事实上,在构造函数的名称丢失的地方有一点红色的曲调。这个曲折只是为了让我注意到。 – Steve