생성자가 비어 있거나 생성자가 없음
클래스 (C #)에 기본 생성자가 반드시 있어야하는 것은 아닙니다.
그렇다면이 상황에서 클래스에 빈 생성자가 있어야합니까? 아니면 건너 뛸 수 있습니까?
빈 기본 생성자를 사용하는 것이 가장 좋은 방법입니까?
Class test
{
public test()
{
}
......
}
또는
Class test
{
......
}
클래스가 타사에서 사용되지 않고 오버로드 된 생성자가 필요하지 않은 경우 빈 생성자를 작성하지 마십시오.
그러나...
이미 제품을 배송했으며 타사에서 클래스를 사용한다고 가정 해보십시오. 몇 달 후 인수와 함께 생성자를 추가해야하는 새로운 요구 사항이 있습니다.
이제 이렇게하면 C # 컴파일러가 더 이상 기본 생성자를 생성하지 않습니다. 빈 생성자를 명시 적으로 추가하지 않으면 타사 코드가 중단됩니다.
제 생각에는 제 3자가 사용하는 공용 클래스에 대해 항상 빈 생성자 (하나의 라이너)를 정의해야합니다.
KISS- 클래스가 기본 생성자에서 아무것도 할 필요가 없다면 정의하지 마십시오. 컴파일러가 자동으로 생성합니다.
로부터 말의 입 :
클래스가 정적이 아닌 경우 생성자가없는 클래스에는 클래스 인스턴스화를 활성화하기 위해 C # 컴파일러에서 공용 기본 생성자가 제공됩니다.
There's nothing like default constructors
. C #에서 매개 변수가없는 공용 생성자입니다. C # 컴파일러는 컴파일하는 동안 클래스에서 생성자를 찾고 생성자가 정의되지 않은 경우 매개 변수가없는 공용 생성자를 추가합니다. 따라서 클래스 객체가 생성을위한 특별한 작업이 필요하지 않은 경우 생성자 정의를 건너 뛰어도됩니다.
둘째, 매개 변수로 하나의 생성자를 정의하면 컴파일러는 사용자가 정의한 생성자를 통해 객체를 생성해야한다고 가정하므로 컴파일러는 매개 변수없는 공용 생성자를 추가하지 않습니다. 즉, 매개 변수 생성자를 사용하여 개체를 생성해야하는 경우 매개 변수가있는 생성자가 하나 이상있는 경우 매개 변수없는 생성자를 명시 적으로 정의해야합니다.
싱글 톤 클래스를 만드는 데 중요한 매개 변수없는 개인 생성자를 가질 수도 있습니다.
기본적으로 C #은 매개 변수가없는 생성자를 추가합니다. 따라서 특별히 할 일이 없다면 추가하지 마십시오.
매개 변수가있는 다른 생성자가 있고 매개 변수없는 생성자를 유지해야하는 경우 코드 없이도 빈 생성자를 직접 추가해야합니다.
매개 변수가없는 빈 생성자를 추가하려는 또 다른 시나리오는 해당 액세스 수정자를 공개에서 다른 것으로 변경하려는 경우 (개인, 보호 또는 내부)입니다.
매개 변수없는 생성자가 필요하지 않은 경우 본문이 비어있는 생성자를 추가하지 마십시오. 그러나 누군가 클래스의 개체를 직렬화 / 역 직렬화하려면 매개 변수가없는 생성자가 필요합니다.
생성자를 정의하지 않으면 컴파일러가 자동으로 매개 변수없는 기본 생성자를 생성하지만 생성자를 직접 정의하면 생성되지 않습니다.
또한 빈 전용 생성자를 정의하여 C # 컴파일러에서 자동으로 생성 된 기본 생성자를 억제 할 수 있습니다.
C # 컴파일러가 기본 생성자를 생성하므로 본문이 비어있는 매개 변수없는 생성자를 작성해서는 안됩니다.
매개 변수가없는 빈 생성자를 포함하는 유일한 경우는 생성자를 전용으로 설정하거나 매개 변수가없는 생성자가 매개 변수로 null을 사용하여 다른 오버로드를 호출하도록하는 경우입니다. BTW, 위의 예에서 public을 지정하지 않고 Test의 생성자를 비공개로 만들었습니다.
class Foo
{
public Foo()
: this(null)
{
}
public Foo(string bar)
{
if (bar != null)
{
Console.WriteLine(bar);
}
}
}
기본적으로 생성되는 빈 생성자를 작성하지 마십시오.
참고 URL : https://stackoverflow.com/questions/2963742/empty-constructor-or-no-constructor
'programing tip' 카테고리의 다른 글
PDF 파일의 구조? (0) | 2020.11.24 |
---|---|
파이썬을 말하는 방법 (0) | 2020.11.24 |
동일한 네임 스페이스를 가진 두 개의 다른 DLL (0) | 2020.11.24 |
C ++에서 사소하지 않은 생성자는 무엇입니까? (0) | 2020.11.24 |
github에서 저장소 이름을 바꾸는 방법은 무엇입니까? (0) | 2020.11.24 |