2017-03-13 9 views
-1

なぜ実際のクラスで演算子を使用できないのか、クラスの定義で何をしているのか理解できません。抽象クラスでのみ使用できる##演算子定義

Errdを作成する呼び出しは、抽象クラスであるため動作します。 しかし、私のErrd定義の注目されたバージョンのように、実際のクラスに演算子を持たせることはできませんか?

Errdの注目に値するバージョンには、Errd errd = eq;を動作させるために修正できるものがありますか?

私はIDEのエラーを追加する必要がありますね。 Errdは、IDEのbecrys abstractとして定義されていません」

は、暗黙的に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')を持つ2つの型があるので、そうでない場合は、コードを更新して、上記で達成しようとしていることを実際に見るのは難しいです。少なくともコンパイルしてください。また、エラーや例外が発生した場合は、その情報を含めると役立ちます。 – Igor

+2

Errdの2番目の定義はコメントアウトされています。 – Steve

+2

[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を含めてください。 [良い質問をするにはどうすればいいですか](http://stackoverflow.com/help/how-to-ask)も読んでください。 [Overriding Operator ==](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

関連する問題