2016-08-23 12 views
2

C#は汎用言語です。あなた自身のクラスや既存のクラスを自由に操作することができます。演算子をオーバーロードして+*をカスタムオブジェクトで使用し、既存のオブジェクトを拡張して新しいメソッドを追加することができます。しかし何らかの理由で、C#では既存のクラスの拡張として演算子のオーバーロードを行うことはできません。どうしてこれなの?回避策がありますか、既存のクラスの演算子オーバーロードを作成する場合は、.Plus().Times()拡張メソッドを作成するだけですか?C# - 演算子オーバーロード拡張

+0

明確にするには、_extension methods_は既存のオブジェクトに新しいメソッドを追加しないでください。型から継承したクラスのインスタンスに対して、「ドット演算子」構文を使用して、型の最初のパラメータを指定して静的メソッドを呼び出すことができます。それはちょうど "統語的な砂糖"です。 –

答えて

1

の3つのオプション:

  1. それらをサブクラス、およびサブクラス
  2. それぞれのクラス(またはそれらを逆コンパイル)に使用するMicrosoftの公に利用可能なソースコードのためのオーバーロードを書き、あなたのオーバーロードを書きます。これは長期的には維持可能ではなく、必ずしも容易ではありませんが、機能します。
  3. 拡張メソッドを使用してください。
  4. 以下に説明するように、クラスと「クローン」クラスの間の変換演算子。

コメントでは、OPは特にSystem.Drawing.PointFを使用して言及しました。私が過去に行ったことは、このような密閉クラスで、上記のように.NETソースを使用して2番目の同様のクラスを開発することです。この2番目のクラスをMyCustomPointFと呼ぶことにしましょう。私は新しいクラスの演算子を書くことができます。しかし、私が追加しようとしているのは、implicit conversion operatorと呼ばれるものです。コンパイラがクラスのインスタンスをSystem.Drawing.PointFインスタンスに変換するのを助けます(外部変換関数を呼び出すことなく)。完璧ではありませんが、オプションです。

+0

.NETオブジェクト、つまり封印されているPointFであるため、実際には逆コンパイルできません。つまり、回避策はありませんか? – Maurdekye

+0

@Maurdekye .NETオブジェクトを逆コンパイルする必要はありません。 .NETはソースコードを公開しています。 – Servy

+0

@Servy良い点。それを反映するためにテキストを少し変えるつもりです。 –

関連する問題