2012-06-10 9 views
7

abstractというメソッドを宣言すると、自動的に仮想化されます。抽象メソッドは仮想ですか?

つまり、サブクラスで何度も上書きすることができ、実行時に、オブジェクトの実行時の型に対応するメソッドが呼び出されますか?

抽象的な非仮想メソッドを宣言できますか?つまり、非抽象サブクラスで実装する必要があり、オーバーライドできないメソッドですか?

+0

[一般的なC#ではすべての抽象関数が仮想ですか?](http://stackoverflow.com/questions/391557/is-every-abstract-function-virtual-in-c-in-general) –

答えて

8

はい、定義によってはabstract methods are virtualです。彼らは実際にはサブクラスによってオーバーライドされるためにオーバーライドする必要があります

インスタンスメソッド宣言がメソッドが抽象メソッドであると言われていること、abstract改質剤を含む場合。 抽象メソッドは暗黙的にも仮想メソッドですが、修飾子virtualを持つことはできません。

あなたができれば、あなたが実装することはできませんので、それはむしろ無用作る、と呼ばれることは決してできない方法を持っているでしょうので、逆に、あなたは、抽象非仮想メソッドを宣言することはできません。

クラスを抽象メソッドを実装しますが、そのサブクラスのいずれかがその実装を変更することはできませ持つようにしたい場合はsealedの出番しかし、それはです例:。

abstract public class AbstractClass 
{ 
    abstract public void DoSomething(); 
} 

public class BaseClass : AbstractClass 
{ 
    public sealed override void DoSomething() 
    { 
     Console.WriteLine("Did something"); 
    } 
} 

お知らせながら、抽象的なものメソッドが(暗黙的に)仮想である場合、具象基底クラスの実装は非仮想です(sealedキーワードのため)。

1

はい、仮想です。さもなければ、それらの実装を書く方法がありません。

関連する問題