5

int を宣言すると..

int A = 10;

代わりに次のことをしないのはなぜですか?

int A = new Int()
A=10;

どちらも同じですか?

4

5 に答える 5

12

が値型であるint構文シュガーがあるためです。Int32ちなみに、定数値(値型Int3210のインスタンス)も同様です。そのため、 を使用して新しいインスタンスを作成する必要はなく、 のコピーを作成して呼び出す必要があります。同様の構文は参照型でも機能しますが、コピーが作成されないという違いがあります。参照が作成されます。 new10A

10基本的に、以前に宣言された のインスタンスと考えることができますInt32。次にint A = 10、変数 A を値のコピーに設定するだけです (参照型10について話している場合、A はコピーではなくインスタンスへの参照に設定されます)。

よりよく説明するために、別の例を次に示します。

struct SomeValueType {
    public SomeValueType(){        
    }
}

public static readonly SomeValueType DEFAULT = new SomeValueType();

次に、これを行うことができます:

SomeValueType myValueType = DEFAULT;  // no neeed to use new!    

とがでSomeValueTypeあるInt32と想像してください。そこにそれがある!DEFAULT10

于 2013-03-21T23:50:50.197 に答える
9

Java を見たことがあるかもしれませんが、ここでintIntegerは 2 つの異なるものであり、後者はnew Integer(10).

C#intでは、 は の特別なエイリアスでInt32あり、すべての意図と目的で同じです。実際、任意のタイプの新しいインスタンスを作成するには、new Int32()何かを作成する必要があります。

ただし、C# (およびほとんどのプログラミング言語) では整数はプリミティブ型であるため、整数リテラルには特別な構文があります。書くだけ10Int32(またはint) になります。

あなたの例では、実際にa変数に値を2回割り当てています。

int a = new Int32();  // First assignment, a equals 0
a = 10;               // Second assignment, a equals 10

2 番目の代入は最初の代入を上書きするので、最初の代入は必要ないと想像するかもしれません。

于 2013-03-21T23:57:30.693 に答える
9

C# には、「参照型」と「値型」の 2 種類の型があります。(ポインターは 3 番目の種類の型ですが、それには触れません。)

値型の既定のコンストラクターを使用する場合、「この値型の既定値を教えてください」と言うだけです。と言うnew int()だけではありません0

したがって、プログラムは次のようになります。

int i = 0;
i = 10;
于 2013-03-22T04:54:33.880 に答える
0

次のようなコードを書く場合

int A = new Int();

変数 'A' は int のデフォルト値によって割り当てられるため、値を割り当てずに変数 'A' を使用できます (値を割り当てずに変数を使用することはできませんc#) キーワード new を使用すると、自動的にデフォルトコンストラクタを呼び出すと、デフォルト値が変数に割り当てられます。

于 2013-04-06T06:05:14.880 に答える