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
나는 2007 년과 그 2002 년 전에 잠깐 C++을 사용하지 않았다. 나는 그것을 찾아야 만했을 것이다. –
int는 C#을 모든 구조체로 갖는 struct 인 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를 사용하여 그것을 기본 값을 제공하기 때문에, 그것에게 가치를 제공 할 수없는 것 . 구조체 형식의
생성자는 클래스 생성자와 유사하지만, 하나는 컴파일러에 의해 자동적으로 을 제공하기 때문에 구조체 는 명시 적 기본 생성자를 포함 할 수 없습니다. 이 생성자는 구조체의 각 필드 을 기본값으로 초기화합니다.
System.Int32
유형 (실제로는 int
)에는 인수를 취하는 생성자가 없습니다. 이것을 증명할 수 있습니다
//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
생성자가 매개 변수를 허용하지 않기 때문에 –