これは重複していませんが、私はGoogleまたはSO検索で見つけることはできません。メソッドのオーバーライドされたメソッドの実装のアクセシビリティをprotected
にする場合は、abstract
またはprotected virtual
のいずれかを作成する唯一のオプションはありますか?私はインターフェイスが宣言を指定するが、アクセシビリティ/スコープをクラスの実装に任せていることを知っているが、私は確信したい。子実装のためのメソッドの制限範囲
メソッドの範囲を制限する唯一の方法がabstract
\ protected virtual
を介して「これはクラスの実装または子のオーバーライドの実装に適用されます」というセマンティクスを与えることです。
説明するコードサンプル。私は次のことを行うことができ、そのような実装の範囲を制限することができます。私は子供の実装のみoverride
OnlyMeorChildrenCanDoAction()
protected
としてではなく、public
ことを保証する上で行うことにより
public class BaseClass
{
protected virtual void OnlyMeOrChildrenCanDoAction()
{
// leave empty as current class is structural/conceptual
// but child instances may need it
}
}
。
abstract
またはprotected virtual
に頼らずにprotected
に限定する別の方法がありますか?このようなメソッドを作成する例は、hereのようにObject.Finalize()
です。
または、質問を多少逆にするには、実装に範囲が限定されていないことを確認しない限り、protected virtual
というメソッドを作成するのはなぜですか?それとも同じことをする別の方法がありますか?
私はあなたが何を求めようとしているかを理解するのが非常に苦労しています。いくつかのコード例を追加することをお勧めします。私はまだdownvoterではなかった – maccettura
私はまだかなり失われています。 – maccettura
@maccettura 'protected virtual'メソッドを作成した場合は、そのメソッドを子実装でのみ' protected'として使用できることを保証します。子の実装を 'public'としてオーバーライドすることはできません。これを行う唯一の方法は上記のアプローチですか? – DiskJunky