派生クラスで宣言された演算子が、基本クラスで宣言された演算子を隠すことができないのはなぜですか? C#5.0仕様から
3.6署名と
...
は、オペレータの名前とのそれぞれのタイプから成るオペレータの署名オーバーロードその左から順に の順序で考慮された仮パラメータ。オペレータの署名には、具体的には に結果の型は含まれません。
...
10.10演算子
...他のメンバーと同様
は、基本クラスで宣言され、オペレータは、派生クラスで を継承しています。 オペレータ宣言は常にオペレータがオペレータの署名に に参加すると宣言されている クラスまたは構造体を必要とするので、それは で宣言された演算子を隠すために、派生クラス内で宣言 オペレータ可能ありません基本クラス。したがって、新しい修飾子は決して必要ではないため、オペレータ宣言では は決して許可されません。
- 最初の段落は、オペレータの署名の一部である「演算子を れているクラスまたは構造体が宣言されている」と言うことはありません。したがって オペレータの宣言では常に、オペレータの 構造体にオペレータの 署名に参加すると宣言されている構造体が必要なのは何ですか?
- これはオペレータの署名に適用されますが、メソッドの 署名には適用されませんか?
- "派生クラス で宣言された演算子で、基本クラスで宣言された演算子を非表示にすることはできません"場合は、 メソッドが使用できますか?
ありがとうございます。
派生クラスの基底クラス演算子のシグネチャを一致させることができないため、隠蔽がどのように起こると思われますか? –
@Alexei:静的public bool operator <(Base b、Derived d)を両方のクラスに書くことを妨げているのはなぜですか? –
@BenVoigt良い点...ちょうど試しました - 隠れていると文句を言っていませんが、通話時にあいまいになります。 –