19

I가 다음 자동 재산권의 DefaultValue 속성은 내 자동 재산권 작동하지 않습니다

[DefaultValue(true)] 
public bool RetrieveAllInfo { get; set; } 

나는이에 대한 기본값입니다 I 가정 false 때문이다 내가 거짓 기본을 찾을 코드 내부에 그것을 사용하려고 bool 변수는 누구에게 단서가 있습니까?

+0

[유사한 질문] (http://stackoverflow.com/questions/705553/net-defaultvalueattribute-on-properties). VS2015에서 :'public bool RetrieveAllInfo {get; 세트; } = true;'[C# 6] (https://blogs.msdn.microsoft.com/csharpfaq/2014/11/20/new-features-in-c-6/) 기능입니다. – marbel82

답변

26

DefaultValue 특성은 Visual Studio 디자이너 (예 : 양식 디자인시)에게 속성의 기본값이 무엇인지 알려주는 용도로만 사용됩니다. 코드에서 속성의 실제 기본값을 설정하지 않습니다. 여기

기타 정보 : http://support.microsoft.com/kb/311339

+1

필립에게 감사드립니다. 그래서 유일한 해결책은 생성자에서 온 것이라고 생각합니다. 감사합니다 –

11

[DefaultValue]은 (예를 들어) 직렬화하는 API (XmlSerializer 등), 및 일부 UI 요소 (PropertyGrid 등)에 의해 사용된다. 값 자체는 설정하지 않습니다.

public MyType() 
{ 
    RetrieveAllInfo = true; 
} 

또는 즉 자동으로 구현-속성을 사용하지 않고 수동으로 필드를 설정 : 당신은 그것을 위해 생성자를 사용해야합니다 이에 대한

private bool retrieveAllInfo = true; 
[DefaultValue(true)] 
public bool RetrieveAllInfo { 
    get {return retrieveAllInfo; } 
    set {retrieveAllInfo = value; } 
} 
0

한 해킹 this 링크입니다.

요약하면이 함수는 생성자 끝에서 호출하십시오.

static public void ApplyDefaultValues(object self) 
    { 
     foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(self)) { 
      DefaultValueAttribute attr = prop.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute; 
      if (attr == null) continue; 
      prop.SetValue(self, attr.Value); 
     } 
    } 
+2

이것은 위험하므로 사용하면 안됩니다. 파생 클래스가 속성 설정자를 작동시키는 데 필요한 모든 것을 설정할 수 있기 전에 기본 클래스 생성자가 완료되기 전에 파생 클래스의 속성을 설정합니다. – hvd

관련 문제