2013-03-14 8 views
5

私はvirtualsealedというキーワードの定義を知っていますが、どちらのメソッドも使用しない場合は、デフォルトでオーバーライドできますか?C#メソッドはデフォルトで封印されているか仮想ですか?

私はvb.netの背景から来ています。それは(MSDNから)vb.netにこのように書きます:

オーバーライド可能かNotOverridable修飾子が指定されていない場合は、 デフォルト設定は、プロパティやメソッドが 、基本クラスのプロパティやメソッドをオーバーライドするかどうかによって異なります。プロパティまたはメソッドが 基本クラスのプロパティまたはメソッドをオーバーライドする場合、既定の設定はオーバーライド可能です。 それ以外の場合は、NotOverridableです。

これはC#でも同様です。

+8

最も速い方法は、あなた自身をチェックすることです。チェックするコードは約10行以下です。 – Zipper

答えて

5

ないと、この上

ディスカッションことはできません。派生クラスでメソッドをオーバーライドできるように、メソッドを仮想として明示的にマークする必要があります。

しかし、できることは、新しいキーワードを使用してメソッドを非表示にすることです。 (MSDNドキュメント)

sealedキーワードは、クラス定義とメソッドの両方で使用されます。クラスから継承したり、メソッドをオーバーライドすることはできません。デフォルトでは、このキーワードを使用しない場合、他の人はあなたのクラスから継承することができます。 (MSDN Documentation

+0

注意 'sealed'はメソッドだけでなくクラスにも適用されます。あなた自身のサブタイプがそれを無効にするのを防ぐために仮想メソッドをシールすることができます。 – Servy

+0

@Servyと私は何か新しいことを学んだ。ありがとう! –

+0

'new'キーワードは、仮想クラスまたは非仮想メソッドのいずれかで基本クラスに存在する派生クラスのメソッドに対して暗黙的であることを追加するだけです。派生クラスのメソッドの宣言で 'new'キーワードを明示的に言及すると、プログラマーは、'あなたが見ているメソッドが継承呼び出し階層に関与することに興味がないという意図を理解するのに役立ちます。 – RBT

6

デフォルトでは、C#のメソッドはではなく、仮想です。

2

いいえ、Javaとは異なり、C#のメソッドはデフォルトでvirtualではありません。どちらもsealedではありませんが、通常の方法であるため無効にすることはできません。

2

いいえ、非仮想メソッドを上書きすることはできません。新しいキーワードは基本クラスの実装を隠すだけであり、良い方法ではありません。アンダース・ヘルスバーグhere

関連する問題