0

Class1 は変数を宣言し、インスタンス化します。定義およびインスタンス化ステートメントは、クラス スコープにすることができます。

class class1
{
public bool variable = false;
}

同じロジックで、Class2 が変数をインスタンス化できないのはなぜですか。インスタンス化ステートメントがこのようにクラススコープ内にあることが許可されないのはなぜですか。

class class2 : class1
{
variable = false;
}

この背後に論理的な説明があるかどうか、私は興味があります。コンパイラがそのような定義を特別な方法で解釈する可能性があります。

4

2 に答える 2

1

インライン初期化以外では、コンストラクター、メソッド、またはプロパティなどに含まれていないステートメントをクラス本体で使用することはできません。

変数を別のものに初期化する場合は、コンストラクターに貼り付けます (これがコンストラクターの目的です)。

public class Class2 : Class1
{
    public Class2()
    {
        variable = false;
    }
}

別の同様の質問:

ステートメントはメソッドのみですが、宣言はどうでしょうか?

要約すると、宣言はクラス スコープでのみ許可されます。インライン初期化は、コンストラクターでメンバー変数を初期化することと同等です。インライン初期化は多くの言語でストックアンドトレードであるため、これはシンタックス シュガーとして追加されたと思います。

命名についても簡単に説明します。クラスは通常、タイトルケースです。

于 2012-05-10T08:09:10.830 に答える
0

2 番目のケースで変数の TYPE を定義しなかったという事実を除いて、2 番目のケースで問題が発生したことはありません。

編集

私はあなたの質問を誤解したと思います:

メンバーvariableは、基本クラスの定義の一部です。どのメソッドからでも、クラスのパブリック メンバーにアクセスすることはできません。それだ。

于 2012-05-10T08:08:54.357 に答える