new
操作を値型で使用できますか?C#で新しい演算を値型で使用できますか?
int i = new int(3);
は
int i = new int();
ことができますが、コンパイルされません。
私はなぜ驚いていますか?
new
操作を値型で使用できますか?C#で新しい演算を値型で使用できますか?
int i = new int(3);
は
int i = new int();
ことができますが、コンパイルされません。
私はなぜ驚いていますか?
—プリミティブ—でも、struct
であり、構造体のコンストラクタを定義(および呼び出し)できます。 int
タイプには、値を受け入れるコンストラクターオーバーロードがありません。この
int i = new int();
のようにそれを使用して
を受け付けていないため、ありがとうございます。 C++では、 'new'を' int'と一緒に使うこともできます。 'int'にはコンストラクタがありますか? – Ben
私はC + +を使用していませんでした。2007年、2002年以前でした。私はそれを探す必要がありました。 –
intはC#でSystem.Int32のエイリアスです。 Sysem.Int32の場合、ctorは、コードではなくコンパイラによって暗黙的に定義されます.ctorを宣言しないと、クラス/構造体のC++で発生するためです。 System.Int32の[.Netソースコード](https://referencesource.microsoft.com/#mscorlib/system/int32.cs)を参照してください。クラス(参照型)と構造体(値型)の間にはC#に大きな違いがあることに注意してください。 –
は置く
int i = 0;
と同じです3
int()
内側()int型を使用すると、それをデフォルト値を与えるので、それに値を与えることはありません。構造体の種類の
コンストラクタは、クラスのコンストラクタに似ていますが、一つは、コンパイラによって自動的に が設けられているので、構造体 は、明示的なデフォルトコンストラクタを含めることはできません。このコンストラクタは、structの各フィールド をデフォルト値に初期化します。 (
int
が本当に何であるかである)
System.Int32
タイプは、引数を取る任意のコンストラクタを欠いています。
//Error: Constructor on type 'System.Int32' not found.
var instance = Activator.CreateInstance(typeof(Int32), new [] {0});
ただし、引き続き引数なしでインスタンス化することはできます。
var instance = Activator.CreateInstance(typeof(Int32));
または両方のちょうど
var instance = new Int32();
はあなたが本当にnew(value)
構文を使用するように死んでいる場合は、常に独自の値型を作成することができます
var instance = default(int);
に等価です。
struct MyInt
{
int _val;
public MyInt(int val)
{
_val = val;
}
static public implicit operator int(MyInt input)
{
return input._val;
}
}
int i = new MyInt(32); //Note the implicit cast
Console.WriteLine(i); //outputs "32"
https:// stack overflow.com/questions/5746873/where-and-why-use-int-a-new-int – Eric
コンストラクタはパラメータ –