3

私は実際にこれを投稿する前にこれこれを通過しました。しかし、それらはC++用です。同じことがC#にも当てはまりますか?そして、私が提供した2番目のリンクは、条件演算子をオーバーロードできないことを示していますが、その理由はわかりませんでした(同じことがC#にも当てはまると仮定しています)。誰かがさらに読むためのリンクを提供できますか、それとも単に問題を明確にすることができますか?

編集:

この演算子をオーバーロードする必要がある実際のシナリオには興味がありませんが、なぜオーバーロードできないのか興味がありました。そのような過負荷が重要な機能を提供する可能性のある実際の状況がないという理由だけでしょうか。

4

4 に答える 4

6

オーバーロード可能な演算子のリストはここにあります。できるものとできないものがあります。

このページでは、オーバーロードできるものをオーバーロードする方法を示します。

条件演算子(?:)については、いいえ、オーバーロードすることはできません。これはブール値に固有です。あなたがそれを過負荷にしたとしたらどういう意味ですか?if / then/elseの省略形です。

質問を言い換えることができる方法は、「if / then/elseでオーバーロードできないのはなぜですか」ということだと思います。

本当の理由は、おそらく、言語の設計者がそれを実装しないことを選択したという事実に関係しています。おそらく、このオペレーターに過負荷を提供しても、過負荷可能にするためのテストと労力に値する十分なメリットはありません。要するに、それはおそらく時間/お金の理由です。コンピュータ言語に追加されたすべての機能について、それは時間、労力、およびテストを意味し、機能によって提供される利点とバランスを取る必要があります。

結局、実装する価値のないものもあります。ある程度のメリットはあると思いますが、おそらく実装のコストがメリットを上回っています。

于 2012-07-27T14:42:51.393 に答える
2

いいえ、?:オーバーロードすることはできません。それはドキュメントで具体的にそう言っています:http: //msdn.microsoft.com/en-us/library/8edha89s%28VS.71%29.aspx

あなたが私に尋ねれば、これは正当な理由です。?:制御フローに影響を与えるため、オーバーロードすると、コードの一部が何をしているかを把握しようとする たびに、式の変数のタイプを検証して制御フローを評価する必要があります。

于 2012-07-27T14:43:21.100 に答える
1

いいえ、条件演算子をオーバーロードすることはできません。

C#言語仕様4.0のセクション7.3.2は、演算子のオーバーロードについて説明しています。

7.3.2演算子のオーバーロード

すべての単項演算子と二項演算子には、任意の式で自動的に使用できる事前定義された実装があります。事前定義された実装に加えて、クラスと構造体に演算子宣言を含めることにより、ユーザー定義の実装を導入できます(§10.10)。ユーザー定義の演算子の実装は、常に事前定義の演算子の実装よりも優先されます。§7.3.3および§7.3.4で説明されているように、適切なユーザー定義の演算子の実装が存在しない場合にのみ、事前定義の演算子の実装が考慮されます。

オーバーロード可能な単項演算子は次のとおりです。

+-!〜++-true false

trueとfalseは式で明示的に使用されていませんが(したがって、§7.3.1の優先順位テーブルには含まれていません)、ブール式(§7.20)と条件付き(§7.14)、および条件付き論理演算子(§7.12)。

オーバーロード可能な二項演算子は次のとおりです。

+-* /%&| ^ << >> ==!=> <> = <=

上記の演算子のみをオーバーロードできます。特に、メンバーアクセス、メソッド呼び出し、または=、&&、||、??、?:、=>、チェック済み、チェックなし、新規、typeof、デフォルト、as、およびis演算子をオーバーロードすることはできません。

..。

于 2012-07-27T14:57:19.713 に答える
0

ブール値のみを操作する演算子をオーバーロードすることはできません。C#でのオーバーロードとは、演算子と組み合わせて使用​​する場合に、型に特定の動作を指定することを意味します。

これが行われるのを私が見ることができる唯一の理由は、次のようなある種の「真っぽい」値を許可することです。

1 == true
0 == false
null == false
new string[] {} == false

これはあなたがやろうとしていることですか?

于 2012-07-27T14:48:02.363 に答える