질문은 구조체에 관한 것입니다. 구조체 타입 변수/객체 (어떤 것이 더 적합 할까?) 또는 구조체의 배열이나리스트를 선언 할 때, 객체처럼 명시 적으로 생성자를 호출해야합니까? 아니면 선언만으로 변수처럼 충분합니까?구조체의 경우 C#에서 명시 적으로 생성자를 호출해야합니까?
답변
C#의 구조체는 생성자를 호출하거나 생성하지 않고 만들 수 있습니다. 생성자가 호출되지 않은 경우 struct의 멤버는 기본값 (기본적으로 0으로 초기화 됨)으로 초기화되고 모든 필드가 초기화 될 때까지 struct
을 사용할 수 없습니다.
:
당신이 new 연산자를 사용하여 구조체 객체를 생성
, 그것은 생성됩니다 및 적절한 생성자가 호출됩니다. 클래스와 달리 구조체는 연산자를 사용하지 않고 을 인스턴스화 할 수 있습니다. 새 필드를 사용하지 않는 경우 필드는 할당되지 않은 상태로 유지되고 필드가 초기화 될 때까지 개체를 사용할 수 없습니다.
다음은 몇 가지 예입니다 : 구조체의
struct Bar
{
public int Val;
public Bar(int v) { Val = v; }
}
public void Foo()
{
Bar z; // this is legal...
z.Val = 5;
Bar q = new Bar(5); // so is this...
q.Val = 10;
// using object initialization syntax...
Bar w = new Bar { Val = 42; }
}
배열은 하나의 구조체 변수 다릅니다. - 당신이 참조 변수를 선언하는 구조체 형식의 배열을 선언 할 때와 같은, 당신은 new
연산자를 사용하여 할당해야합니다
Bar[] myBars = new Bar[10]; // member structs are initialized to defaults
당신은 또한 당신의 구조체 생성자가있는 경우 배열의 초기화 구문을 사용하도록 선택할 수 있습니다 :
Bar[] moreBars = new Bar[] { new Bar(1), new Bar(2) };
이보다 더 정교해질 수 있습니다.
struct Bar
{
public int Val;
public Bar(int v) { Val = v; }
public static implicit operator Bar(int v)
{
return new Bar(v);
}
}
// array of structs initialized using user-defined implicit converions...
Bar[] evenMoreBars = new Bar[] { 1, 2, 3, 4, 5 };
저는 2 년 동안 C#으로 개발했지만 절대 사용하지 않았거나 암시 적 키워드를 발견했다고 말하기 엔 당혹 스럽습니다! – Pierreten
구조체는 C#에서 Value Type
, 그래서 힙이 아니라 스택 메모리를 사용하여 struct
가 원시적 형에서 암시 적 변환 연산자가있는 경우, 당신은 지금처럼 초기화 할 수 있습니다.
당신은
INT는 C#에서 구조체 타입, 예컨대 int a = 90;
일반적인 방법으로 구조체 변수를 선언 할 수 있습니다.
new
연산자를 사용하면 해당 생성자가 호출됩니다.
컨테이너를 새로 만들어야하는지 (예 : 목록) 확인해야하는지 확실하지 않지만 대답은 '예'입니다. :) –
Dave