2012-04-30 27 views
-1
abstract class ClassStupid 
{ 
    public ClassStupid() 
    { 

    } 
} 

ClassStupid stupid = new ClassStupid(); //This is not possible. We can not create an Instance of Abstract Class. 

私の質問は、コンストラクタを持つ抽象クラスのインスタンスを作成するのをプログラムが防止するC#コンパイラのMAGICです。抽象クラスvsクラス

オブジェクト指向プログラミングでは、私のWiki

から、クラスの(時にはCTORに短縮)コンストラクタは、オブジェクトの作成時に呼び出されるサブルーチンの特殊なタイプです。 は新しいオブジェクトを用意しています。オブジェクトを最初に作成するときに必要なメンバー変数を設定するためにコンストラクタが使用するパラメータを受け付けることがよくあります。これは、クラスのデータメンバーの値を構築するため、コンストラクターと呼ばれます。

抽象クラスのコンストラクタとノーマルクラスのコンストラクタとの違いは?

+4

あなたはウィザードの学校に行ったことがないということですか? – ChaosPandion

+0

魔法はCLRにあると思いますか?私は同様のものをコンパイルしようとするとコンパイルエラーが発生する。 –

+0

違いはありません。パブリックアクセスは許可されません。 – xandy

答えて

3

抽象クラスと非抽象クラスのコンストラクタは異なりません。しかし、クラスは異なっており、コンパイラはそれを知っています。これは、抽象クラスの構築があなたが投稿に表示する方法は禁止されている理由です:コンパイラは単にIsAbstractフラグをチェックし、コンパイル時には構築を許可しません。

さらにCLRには、クラスが抽象クラスであることを示すランタイムフラグもあります。そのため、実行時に抽象クラスをのリフレクションでインスタンス化できないのはこのためです。