int を宣言すると..
int A = 10;
代わりに次のことをしないのはなぜですか?
int A = new Int()
A=10;
どちらも同じですか?
が値型であるint
構文シュガーがあるためです。Int32
ちなみに、定数値(値型Int3210
のインスタンス)も同様です。そのため、 を使用して新しいインスタンスを作成する必要はなく、 のコピーを作成して呼び出す必要があります。同様の構文は参照型でも機能しますが、コピーが作成されないという違いがあります。参照が作成されます。 new
10
A
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
と想像してください。そこにそれがある!DEFAULT
10
Java を見たことがあるかもしれませんが、ここでint
とInteger
は 2 つの異なるものであり、後者はnew Integer(10)
.
C#int
では、 は の特別なエイリアスでInt32
あり、すべての意図と目的で同じです。実際、任意のタイプの新しいインスタンスを作成するには、new Int32()
何かを作成する必要があります。
ただし、C# (およびほとんどのプログラミング言語) では整数はプリミティブ型であるため、整数リテラルには特別な構文があります。書くだけ10
でInt32
(またはint
) になります。
あなたの例では、実際にa
変数に値を2回割り当てています。
int a = new Int32(); // First assignment, a equals 0
a = 10; // Second assignment, a equals 10
2 番目の代入は最初の代入を上書きするので、最初の代入は必要ないと想像するかもしれません。
C# には、「参照型」と「値型」の 2 種類の型があります。(ポインターは 3 番目の種類の型ですが、それには触れません。)
値型の既定のコンストラクターを使用する場合、「この値型の既定値を教えてください」と言うだけです。と言うnew int()
だけではありません0
。
したがって、プログラムは次のようになります。
int i = 0;
i = 10;
次のようなコードを書く場合
int A = new Int();
変数 'A' は int のデフォルト値によって割り当てられるため、値を割り当てずに変数 'A' を使用できます (値を割り当てずに変数を使用することはできませんc#
) キーワード new を使用すると、自動的にデフォルトコンストラクタを呼び出すと、デフォルト値が変数に割り当てられます。