2017-10-30 5 views
-1

new操作を値型で使用できますか?C#で新しい演算を値型で使用できますか?

int i = new int(3); 

int i = new int(); 

ことができますが、コンパイルされません。

私はなぜ驚いていますか?

+0

https:// stack overflow.com/questions/5746873/where-and-why-use-int-a-new-int – Eric

+4

コンストラクタはパラメータ –

答えて

5

—プリミティブ—でも、structであり、構造体のコンストラクタを定義(および呼び出し)できます。 intタイプには、値を受け入れるコンストラクターオーバーロードがありません。この

int i = new int(); 

のようにそれを使用して

+0

を受け付けていないため、ありがとうございます。 C++では、 'new'を' int'と一緒に使うこともできます。 'int'にはコンストラクタがありますか? – Ben

+0

私はC + +を使用していませんでした。2007年、2002年以前でした。私はそれを探す必要がありました。 –

+0

intはC#でSystem.Int32のエイリアスです。 Sysem.Int32の場合、ctorは、コードではなくコンパイラによって暗黙的に定義されます.ctorを宣言しないと、クラス/構造体のC++で発生するためです。 System.Int32の[.Netソースコード](https://referencesource.microsoft.com/#mscorlib/system/int32.cs)を参照してください。クラス(参照型)と構造体(値型)の間にはC#に大きな違いがあることに注意してください。 –

1

は置く

int i = 0; 

と同じです3int()内側()int型を使用すると、それをデフォルト値を与えるので、それに値を与えることはありません。構造体の種類の

コンストラクタは、クラスのコンストラクタに似ていますが、一つは、コンパイラによって自動的に が設けられているので、構造体 は、明示的なデフォルトコンストラクタを含めることはできません。このコンストラクタは、structの各フィールド をデフォルト値に初期化します。 (intが本当に何であるかである)

0

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" 
関連する問題