2012-01-24 3 views
2

나는 사용자 정의 클래스의 상수 정적 컬렉션을 만들과 같이하기 위해 노력하고있어 : 만들 MyClass에정적 상수 사용자 정의 클래스

static class MyObjects 
{ 
    public const MyClass anInstanceOfMyClass = { Property1 = "foo", Property2 = "bar" }; 
} 

의 상수 정적 객체의 클래스를 다음

public class MyClass 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
} 

그러나 컴파일러는 "Property1"및 "Property2"이름이 현재 컨텍스트에 존재하지 않는다고 불평합니다. 또한 내가 이것을 할 때 :

public const MyClass anInstanceOfMyClass = new MyClass() { Property1 = "foo", Property2 = "bar" }; 

컴파일러는 Property1과 Property2가 읽기 전용 인 것에 대해 불평합니다. 이 MyClass 객체의 상수 정적 클래스를 올바르게 초기화하려면 어떻게해야합니까?

답변

5

이 시도 :

public static readonly MyClass AnInstanceOfMyClass = new MyClass() { Property1 = "foo", Property2 = "bar" }; 

가 액세스 수정없이 static class MyObjects 조심. 기본값은 internal입니다. 당신의 의도가 동일한 어셈블리 내에서 이것을 사용하는 경우, 당신은 괜찮을거야,하지만 당신은 어셈블리의 외부에서이 헬퍼 클래스를 사용하려는 경우, 다음과 같이는 public 키워드를 사용해야합니다

public static class MyObjects 
{ 
    public static readonly MyClass AnInstanceOfMyClass = new MyClass() { Property1 = "foo", Property2 = "bar" }; 
} 

C# 명명 규칙에 대한 Microsoft의 권장 사항에 따라 정적 속성에 파스칼 케이스를 사용하고 있습니다.

위의 의견뿐만 아니라, 여기에 당신은 readonlyconst 키워드에 대한 자세한 정보를 찾을 수 있습니다

4

당신은 const (string 외에) 참조 형을 만들 수 없습니다. staticreadonly 키워드를 사용하십시오.

+0

는 @ThoughtCrhyme @Daniel는 말. 값 유형과'string'을'const'와 함께 사용할 수 있기 때문에 대신'static'을 사용하십시오. –

0

"헌장"값 해야합니다 a 컴파일 시간은입니다. 이는 기본 데이터 유형이어야 함을 의미합니다.