C#は汎用言語です。あなた自身のクラスや既存のクラスを自由に操作することができます。演算子をオーバーロードして+
と*
をカスタムオブジェクトで使用し、既存のオブジェクトを拡張して新しいメソッドを追加することができます。しかし何らかの理由で、C#では既存のクラスの拡張として演算子のオーバーロードを行うことはできません。どうしてこれなの?回避策がありますか、既存のクラスの演算子オーバーロードを作成する場合は、.Plus()
と.Times()
拡張メソッドを作成するだけですか?C# - 演算子オーバーロード拡張
2
A
答えて
1
の3つのオプション:
- それらをサブクラス、およびサブクラス
- それぞれのクラス(またはそれらを逆コンパイル)に使用するMicrosoftの公に利用可能なソースコードのためのオーバーロードを書き、あなたのオーバーロードを書きます。これは長期的には維持可能ではなく、必ずしも容易ではありませんが、機能します。
- 拡張メソッドを使用してください。
- 以下に説明するように、クラスと「クローン」クラスの間の変換演算子。
コメントでは、OPは特にSystem.Drawing.PointF
を使用して言及しました。私が過去に行ったことは、このような密閉クラスで、上記のように.NETソースを使用して2番目の同様のクラスを開発することです。この2番目のクラスをMyCustomPointF
と呼ぶことにしましょう。私は新しいクラスの演算子を書くことができます。しかし、私が追加しようとしているのは、implicit conversion operatorと呼ばれるものです。コンパイラがクラスのインスタンスをSystem.Drawing.PointF
インスタンスに変換するのを助けます(外部変換関数を呼び出すことなく)。完璧ではありませんが、オプションです。
関連する問題
- 1. C++オーバーロード:[] []演算子のオーバーロード
- 2. C++演算子+演算子+ =オーバーロード
- 3. C++:演算子オーバーロード、演算子+
- 4. C++オーバーロード演算子++
- 5. C++静的演算子オーバーロード
- 6. C++の演算子のオーバーロード
- 7. バイナリ演算子C++オーバーロード
- 8. C++のオーバーロード()、[]演算子
- 9. C++ - オーバーロード演算子new
- 10. C++演算子のオーバーロード[]
- 11. 演算子のオーバーロード+ C++
- 12. 演算子のオーバーロード== C++
- 13. C#のオーバーロード演算子==クラス
- 14. C++マップの演算子オーバーロード
- 15. グローバル演算子 " - >"オーバーロードC++
- 16. C++テンプレートメタプログラミング:オーバーロード演算子
- 17. C++演算子のオーバーロード順
- 18. C:++で演算子のオーバーロード「:=」
- 19. C++テンプレートとオーバーロード演算子
- 20. C++ - のオーバーロード[]演算子
- 21. C++オーバーロード演算子== in myStack.h
- 22. C++コンパイルエラー。ストリーム演算子オーバーロード
- 23. 演算子のオーバーロード演算
- 24. オーバーロード演算子+
- 25. 演算子オーバーロード==
- 26. オーバーロード演算子 `[]`と ':'
- 27. 演算子のオーバーロード*
- 28. ポストインクリメント演算子オーバーロード
- 29. C++の演算子のオーバーロード(比較演算子)
- 30. <<演算子とC++の文字列のオーバーロード+演算子
明確にするには、_extension methods_は既存のオブジェクトに新しいメソッドを追加しないでください。型から継承したクラスのインスタンスに対して、「ドット演算子」構文を使用して、型の最初のパラメータを指定して静的メソッドを呼び出すことができます。それはちょうど "統語的な砂糖"です。 –