int を宣言すると..
int A = 10;
代わりに次のことをしないのはなぜですか?
int A = new Int()
A=10;
どちらも同じですか?
が値型である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
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 を使用すると、自動的にデフォルトコンストラクタを呼び出すと、デフォルト値が変数に割り当てられます。