2010-04-13 2 views
0

C# 3.0에서 지정된 클래스의 생성자를 오버로드 할 때 클래스 본문에 기본 생성자를 작성해야합니까? 내가 아는 한, 그렇게 할 필요가 없었습니다. 클래스가 (IOW 당신이 어떤 제정신 기본값을 제공하는) 경우에 유용 C# 3.0에서 지정된 클래스의 생성자를 오버로드 할 때 클래스 본문에 기본 생성자를 작성해야합니까?

class Test 
{ 
     public int ID {get; private set;} 
     public int Name {get; private set;} 

     public Test() 
     { 
     } 

     public Test(int id, int name) 
     { 
      .... 
     } 

}  

당신에게

+0

'이름'은 'int' 유형입니까? 이상한 ☺ – Timwi

답변

2

질문을 던지게하십시오. 클래스를 사용할 수 있도록 단일 생성자를 작성해야하는 이유는 무엇입니까?

이유는 생성자를 쓰지 않을 때 C# 컴파일러가 기본 생성자를 방출하기 때문입니다. 그냥 우리를 위해 쉽게. 그러나 하나 이상의 생성자를 지정하면 C# 컴파일러는 필요한 모든 생성자를 지정했다고 가정합니다. 이 경우 모든 클래스에 기본 생성자가 있어야하므로 기본 생성자를 내보낼 수 없습니다.

이 C# 기능은 응용 프로그램 개발자에게 좋지만 프레임 워크 개발자에게는 좋지 않을 수 있습니다. Microsoft의 일부 팀에서는 클래스에 코드 작성자가없는 경우 기본 생성자를 명시 적으로 지정하지 않고 다음 릴리스에서 대체 생성자를 실수로 추가하기가 쉽기 때문에 항상 C# 코드에 기본 생성자를 작성합니다. 이 경우 기본 생성자가 없으므로 새 릴리스는 호환되지 않습니다.

0

감사, 다음 기본 생성자는 다른 단지 클래스의 사용자에 대한 더 많은 작업과 모호성을 만듭니다 좋다.

예제에 따르면, 클래스가 기본값으로 동작하지 않는 한 setter에 대한 액세스 권한이 없으므로 매우 쓸모가 없습니다.

1

클래스가 직렬화 될 때 - 클래스에 기본 생성자가 없으면 클래스를 "재수 화"할 수 없습니다.

예를 들어 클래스가 웹 서비스와주고받는 메시지에 사용 중이거나 데이터베이스 테이블이나 파일과 같은 저장 장치에 저장되는 경우를 예로들 수 있습니다.

+0

이것은 'XmlSerializer'의 경우지만 .NET 3.5의'DataContractSerializer '는 아니지만 더 강력합니다 (개인 속성과 필드를 serialize 할 수 있음). 처리/생성하는 XML의 형식이 덜 유연합니다. –

+0

BinaryFormatter에는 기본 생성자가 없어도 문제가 없습니다. – leppie

관련 문제