0

Q)C#での演算子のオーバーロードに「public」と「static」が必要なのはなぜですか?

この記事を試しました

http://blogs.msdn.com/b/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx

しかし、誰かが著者が言おうとしていることを説明できますか?

4

2 に答える 2

2

著者は、非静的な方法でのオペレーターのオーバーロードの潜在的な機能の簡単なコスト/メリット分析を行い、そのメリットはコストを正当化しないと結論付けています。静的にオーバーロードされた演算子の内部からのメソッド。ただし、中間の仮想関数を使用せずにオーバーロードされた演算子を定義できるようにするコストは大きくなります。

  • オペレーターの作業方法に非対称性を導入します (2+c違法かもしれませんが、c+2問題ありません) 。
  • null左側の参照を処理する必要があります
  • とにかく単一のディスパッチでは問題に対処できないため、オペレーター内で追加のディスパッチ作業を行うことになります

最後に、著者は、大きなメリットをもたらさずに多くの混乱をもたらす機能を導入するのではなく、同等のレベルの機能を提供するために拡張できる、よりクリーンな設計を採用したと述べています。

于 2012-12-07T17:30:38.220 に答える
0

public は、クラスの外からアクセスできるようにするために必要です。クラスのインスタンスで呼び出さないため、 static が必要です。

public class B {
    public static B operator+(B b1, B b2) { return b1.Add(b2); }
    protected virtual B Add(B b2) { // ...

上記の例では、次のようなコードを使用できますb3 = b1 + b2。ここで + 演算子は、クラス B のいずれのインスタンスでも呼び出されないため、静的である必要があります。お役に立てれば。

于 2012-12-07T17:26:40.193 に答える