2008-10-10 8 views
0

.NET 3.5를 사용 중이고 클래스 A가 내부 봉인 된 부분으로 표시되어 있으며 System.Configuration.ApplicationSettingsBase에서 파생됩니다. 그럼 다음과 같은 방식으로이 클래스의 인스턴스를 사용어떻게 ApplicationSettingsBase에서 파생 된 클래스에서 'Default'멤버를 볼 수 없습니까?

error CS0117: 'A' does not contain a definition for 'Default' 

:

A A_Instance = new A(); 
A_Instance.Default.Save(); 

왜 비주얼 C# 컴파일러가 불평 것입니까?

답변

3

는 :

private static ServerSettings defaultInstance = ((ServerSettings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new ServerSettings()))); 

public static ServerSettings Default 
    { 
    get { return defaultInstance; } 
} 

이 비주얼 스튜디오에 의해 생성됩니다 코드입니다

+0

동기화 비트가 작동하지 않았으며 ServerSettings가 질문과 함께 더 나은 비트가 'A'여야합니다. –

0

ApplicationSettingsBase는 SettingsBase에서 상속되며 어느 쪽도 Default 속성을 노출하지 않습니다. 컴파일러 오류로 판단하면 클래스가 추가되지 않습니다.

AFAIK C#은 기본값으로 표시된 속성에 액세스하기 위해 'Default'라는 단어 주위에 특별한 구문을 지원하지 않습니다.

예상되는 동작은 무엇입니까?

당신은 아마이 찾고있는
+0

이 코드는 내 자신의 것이 아니기 때문에 나는 정말로 확신하지 못했습니다. 레거시 코드입니다. –

1

.NET은 액세스 할 수있는 ApplicationSettingsBase에서 '기본'부재를 제공하지 않습니다 행동 양식. 내가주의하지 못한 것은 'Default'가 A의 싱글 톤으로 사용되었다는 것입니다. 따라서 gdean2323에서 제공하는 샘플 코드는 수정 사항에 대한 지침을 제공합니다. 문제를 해결하는 코드는 클래스 A에 다음 코드를 추가해야했습니다 (단순화를 위해 동기화가 필요 없음).

private static A defaultInstance = new A(); 
public static A Default 
{ 
    get 
    { 
     return defaultInstance; 
    } 
} 
관련 문제