2017-03-13 21 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