2013-08-02 2 views
0
class Program 
{ 
    class B 
    { 
     [DefaultValue(2)] 
     public int x, y; 

     [DefaultValue(5)] 
     public int z; 
    } 

    static void Main(string[] args) 
    { 
     B b = new B(); 
     Console.WriteLine(String.Format("{0} {1} {2}", b.x, b.y, b.z)); 
    } 
} 

결과 : 0, 0, 0DefaultValue는 콘솔 응용 프로그램에서 작동합니까?

DefaultValueAttribute 콘솔 응용 프로그램에서 작동하지 않는, 또는 내가 뭔가 잘못을했다?

편집 :

누군가 get,set와 특성에 대해 말했지만,이 역시 작동하지 않습니다

class Program 
{ 
    public class A 
    { 
     [DefaultValue("123")] 
     public string Name { get; set; } 
    } 

    static void Main(string[] args) 
    { 
     var a = new A(); 
     Console.WriteLine(a.Name); 
    } 
} 

결과 : 빈 문자열

답변

2

DefaultValue를 속성이 런타임에 개체와 함께 뭔가를 특정 클래스에 의해 사용되는 (그 값이 5 인 경우 시리얼 라이저는, z를 직렬화하지 않기로 결정 수 등이 기본이기 때문에) .

속성은 클래스의 기본 생성자를 생성하기 위해 컴파일러에서 사용하지 않습니다. 다음과 같이

대신 기본 생성자을 정의해야합니다 :

class B { 
    public B() { 
     x = y = 2; 
     z = 5; 
    } 
} 
2

참조하십시오 DefaultValueAttribute Class

특성의 기본값을 지정합니다.

x, yz는 어떤 특성 없지만, 필드. 이 시도 :

class B 
    { 
     public int x, y, z; 
     public B() 
     { 
      x = y = 2; 
      z = 5; 
     } 
    } 
+0

내 질문이 'Name {get; 설정;}'. 그것은 재산인가? 그렇지 않다면, 예를 보여주세요, 이해할 수 없네요. – FSou1

+0

@ FSou1 : 네, 그건 재산입니다. Andrey의 답변에서 읽을 수 있듯이, 'DefaultValue'는 실제로 아무 것도하지 않습니다. – ProgramFOX

3

다른 코드가 그것을 검색 할 수 있도록 정말 아무것도하지 않고, 그것을 나타내는 기능이 DefaultValue, MSDN explains :

비주얼 디자이너는 기본값을 사용하여 멤버의 값을 재설정 할 수 있습니다. 코드 생성기는 기본 값을 사용하여 코드가 구성원에 대해 생성되어야하는지 여부를 결정할 수도 있습니다. A DefaultValueAttribute는 구성원이 속성의 값으로 자동으로 으로 초기화되도록하지 않습니다. 코드에 초기 값 을 설정해야합니다.

1

.net 속성이 너무 많을 것으로 예상됩니다. 속성은 메타 데이터의 확장 일뿐입니다. 즉, 컴파일러는이 sorta 정보를 특정 속성에 바인딩하고 예상하는 실제 값을 설정하지 않습니다. 값 설정을 원한다면 직접 작성한 코드 나 다른 프레임 워크가 있어야합니다. 스택 오버플로시이 링크를 확인할 수 있습니다. .Net DefaultValueAttribute on Properties

관련 문제