C#の仕様はおそらくそう言いますが、私の検索で何も表示されませんでしたが、それは私が探している答えではありません。なぜC#は明示的にオペレータまたはプロパティアクセサを呼び出すことができませんか?
オペレータメソッド(op_Addition
など)またはプロパティアクセサー(get_Length
など)を直接呼び出すことは、悪い考えであることを示すシナリオを探しています。 C#言語の設計者がそれをやめさせるのに十分ではありません。(compiler error CS0571を参照してください)
この能力を持たせることが有用である一般的なシナリオは、Func<T>
デリゲートがプロパティの値を返す場所です。 getアクセサーをデリゲートのメソッドにすることもできません。単純な回避策(() => someObject.SomeProperty
を使用)がありますが、オーバーヘッドを除いても、someObject.get_SomeProperty
ほど明確ではありません。
タイプが複数の異なる型への複数の変換を定義すると、メソッドは異なる戻り型で同じシグネチャを持つことになります。これはC#ではどちらも許可されません。しかしそれはdifferent questionです。
たとえば、この回答を参照してください。すべての機能にはコストがあります。 http://stackoverflow.com/a/4914207/161457 – TrueWill
@TrueWillそれを拒否する独自のコンパイル時エラーを生成する機能もあります。だから、なぜ許可するコストは、許可しないことのコストよりも大きいと考えられたのですか? –
'()=> someObject.SomeProperty'は' someObject.get_SomeProperty'と同じではありません。最初は、プロパティを返す無名関数です。 2つ目はプロパティのgettor関数そのものです(カッコなしの式で使用すると、その関数にデリゲートを返すことが期待されます)。 – Abel