2009-03-02 20 views
2

抽象クラスと実クラスを継承するときに派生クラスに違いがあるのでしょうか?抽象クラスとC#での実際のクラス継承

実際のクラスの継承が階層を作成するように見えますが、抽象クラスの継承はコンパイラの派生クラスへのコピー貼り付けコードにすぎませんか?

抽象クラスは階層を作成しますか?特別なキーワードを使ってアクセスできますか?

基本クラスを使用して基本クラスにアクセスすることはわかっていますが、抽象メンバは派生クラスの元のメンバと同じように見えますか?

最後に、2とのパフォーマンスの違いは何ですか?

+0

これを説明できますか?「抽象メンバは、派生クラスの元のメンバと同じように見えますか?非抽象クラスを継承するのとどのように違いますか? – recursive

+0

あなたは正しいです。基本キーワードを使って継承されたメンバーにアクセスすることもできますが、抽象クラスには特別なキーワードはありません。 –

+0

"これらのタイプは「抽象的な」ではなく、intやfloatと同じくらいリアルです」 - Douglas McIlroy –

答えて

5

はい抽象クラスは存在します。コンパイラはコピー貼り付けを行いません。 CLRは依然として仮想メソッド呼び出しを行う必要があるため、パフォーマンスの違いはありません。例えば

次のC#:

abstract class Foo { } 

class Bar : Foo { } 

は、次のILを生成する:

.class private abstract auto ansi beforefieldinit Foo 
    extends [mscorlib]System.Object { } 

.class private auto ansi beforefieldinit Bar 
    extends Foo { } 

抽象型の概念は非常にILの一部です。

3

唯一の違いは、派生することなく抽象基本クラスをインスタンス化することはできませんが、抽象基本クラスを派生させることはできません。派生クラスの観点からは、すべてが同じです。

1

要約クラスと具象クラスは両方とも、(OO)モデリングのツールです。継承と置換のルールには違いはありません。そこいくつかの専門的には、以下のとおりです。

  • A抽象クラスは は
  • 抽象メソッドは だけ抽象クラス

で許可されている。しかし、抽象クラスは非抽象メソッド、プロパティを持つことができますし、インスタンス化することはできませんフィールド。

パフォーマンスは、クラスに関係していないが、抽象/仮想メソッドのための小さなペナルティがあります。

0

抽象クラスのパワーは実装されていません。派生クラスのインスタンスがいっぱい必要な機能

0

抽象クラスは、基本クラスの原始的な形で持っていることを確信するために使用することができます。これらはインスタンス化することはできません。つまり、開発者がこれらのクラスから派生して機能を使用する必要があります。抽象クラスで定義された抽象メソッドはすべて、その子クラスで実装する必要があります。だから、抽象クラスから派生した子クラスに存在しなければならないメソッドを実装することができます。 派生クラスの開発者がカスタマイズできるオブジェクトの基本要素を定義します。また、非抽象クラスであるものを使用し続けながら

非抽象クラスは、クラス最高のfunctioanlityを拡張するために使用されています。すべての非プライベートメンバーおよびメソッドには、派生クラスからアクセスできます。

関連する問題