2009-03-06 6 views

답변

3

형식 또는 MemberInfo에서 GetCustomAttributes()를 호출 할 때 생성자가 호출됩니다.

+0

이 문서에 대한 참조를 게시 하시겠습니까, 제발. –

+1

@Sunny 디버거를 통해 실행하고 직접보십시오. –

+0

의미가 있습니다. 좀 더 명확히하기 위해서 : 만약 다른 클래스가 GetCustomAttributes와 생성자의 속성의 GetCustomAttributes 속성을 요구할 때 "생성"되는 클래스에 속성이 있다면, 모든 종류의 작업을 수행해야합니다. –

2

확신 할 수있는 유일한 것은 이전에 호출해야한다는 것입니다. 생성자가 호출 될 정확한 시간은 정의되어 있지 않습니다.

어쨌든, 동작은 지정되지 않았으므로 현재 구현에서 생성자가 호출 될 때마다 의존해서는 안됩니다.

+0

일 - @ 렉스-M의 대답에 주석 정확히 내 지점. –

3

표준을 읽는 것 (C# 2.0 버전에서 17.3.2)은 지정되지 않았습니다. 메타 데이터에서 인스턴스로 변환하는 방법 만 있습니다.

다른 구현에서 테스트해야 할 수도 있습니다. 지정하지 않으면 다른 방식으로 해석 될 수 있기 때문입니다.

+0

정적 생성자와 비슷합니까? –

+1

아니요, 실제로이 것이 지정되어 있습니다. –

+1

... 주어진 응용 프로그램 도메인에서 최대 한 번 실행됩니다. 정적 생성자의 실행은 응용 프로그램 도메인 내에서 발생하는 다음 이벤트 중 첫 번째에 의해 트리거됩니다. 클래스의 인스턴스가 만들어집니다. 클래스의 모든 정적 멤버가 참조됩니다. –

0

속성은 유형에 대한 메타 데이터 또는 정보를 저장하는 장식입니다. .Net 프레임 워크는 이러한 종류의 정보를 사용하여 인스턴스를 만들 때 추가 처리를 수행합니다.

이 속성은 다른 클래스에서 요청할 때만 생성되고 Type.GetCustomAttributes()와 같이 생성됩니다. 따라서 사용자 고유의 속성을 생성 한 다음 사용자 정의 속성을 요청할 수도 있습니다.

public class MyOwnAttribute: Attribute {} 

은/* 다른 클래스의 어느 시점에서 */

void CheckIfClassIsDecoratedWithMyOwnAttribute() 
{ 
    var instance = new MyClass(); 
    if (instance.GetType().GetCustomAttributes(typeof(MyOwnAttribute))) 
    { 
     //do whatever you want 
    } 
}