Latest web development tutorials

C #을 특성 (속성)

특성 (특성) 선언 태그 정보의 런타임 동작 (등 클래스, 메소드, 구조체, 열거 컴포넌트와 같은) 다양한 구성 요소들을 전송하기위한 프로그램이다.당신은 기능을 사용하여 프로그램에 선언적인 정보를 추가 할 수 있습니다. 성명 라벨이 대괄호의 요소의 앞에 배치하여 적용된다 ([])에 대해 설명합니다.

(속성) 특성 등등 컴파일러 지침과 의견, 설명, 방법, 추가 정보와 같은 메타 데이터를 추가 할 수 있습니다.미리 정의 된속성과사용자 정의 속성: 닷넷 프레임 워크 기능의 두 가지 유형을 제공합니다.

소정의 특성 (속성)

소정의 특성 (속성) 다음과 같은 구문 :

[속성 (positional_parameters, name_parameter = 값, ...)]
요소

특성 (속성)의 이름과 값이 적용되는 요소 앞에 위치, 대괄호 안에 지정됩니다. positional_parameters 필요한 소정의 정보를, name_parameter 옵션 정보를 소정.

미리 정의 된 특성 (속성)

닷넷 프레임 워크는 세 가지 미리 정의 된 속성을 제공합니다 :

  • AttributeUsage
  • 조건부
  • 폐기

AttributeUsage

미리 정의 된AttributeUsage 사용자 정의 속성 클래스를 사용하는 방법에 대해 설명합니다 속성.이 속성의 타입은 프로젝트에 적용될 수 지정한다.

이 기능의 규정 구문은 다음과 같습니다

[AttributeUsage (
   validon,
   AllowMultiple = allowmultiple,
   상속 = 상속
)]

상기

  • Validon 특성은 언어 요소들이 배치 될 수있는 매개 변수가 소정. 이것은 열거AttributeTargets값의 조합이다. 기본값은AttributeTargets.All입니다.
  • 매개 변수allowmultiple (선택 사항)속성AllowMultiple 속성(등록 정보)에 대한 부울 값을 제공합니다. true의 경우,이 기능은 더 유용합니다. 기본값은 false (단일 사용)입니다.
  • 매개 변수(선택 사항)재산상속재산 (부동산)에 대한 부울 값을 제공물려 받았다.true의 경우,이 속성은 파생 클래스는 상속 될 수 있습니다. 기본값은 false입니다 (상속되지 않음).

예를 들면 :

[AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property, 
AllowMultiple = TRUE)]

조건부

이 기능은 구현이 최고 전처리 식별자에 따라, 미리 정의 된 조건 방법을 표시합니다.

여기에는디버그 또는 추적으로지정된 값에 따라 메소드 호출의 조건부컴파일의 원인이됩니다.코드를 디버깅 할 때 예를 들어, 상기 변수의 값이 표시된다.

이 기능의 규정 구문은 다음과 같습니다

[조건부 (
   conditionalSymbol
)]

예를 들면 :

[조건부 ( "DEBUG")]

다음의 예는이 기능을 보여줍니다

#DEFINE DEBUG
시스템을 이용하여;
System.Diagnostics 네임을 사용하는 단계;
공공 MyClass 클래스
{
    [조건부 ( "DEBUG")]
    공공 정적 무효 메시지 (문자열 MSG)
    {
        Console.WriteLine (MSG);
    }
}
클래스 테스트
{
    정적 무효 기능 1 ()
    {
        Myclass.Message ( "기능 1.에서");
        기능 2 ();
    }
    정적 무효 FUNCTION2 ()
    {
        Myclass.Message ( "기능 2에서");
    }
    공공 정적 무효 메인 ()
    {
        ( "주요 기능합니다.") Myclass.Message;
        기능 1 ();
        Console.ReadKey ();
    }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

주요 기능에서
기능 (1)
기능 2

폐기

프로그램 개체 태그 미리 정의 된 속성은 사용할 수 없습니다. 그것은 당신이 특정 대상 요소를 폐기하도록 컴파일러에게 있습니다. 예를 들어, 새로운 방법이 클래스에서 사용되는,하지만 당신은 여전히 ​​이전 방법에 클래스를 유지하려는 경우, 당신은 (새로운 방법이 사용되지 않는 것으로 표시 할 메시지의 기존 방법 대신 사용해야 오래된를 표시 할 수 있습니다 A).

이 기능의 규정 구문은 다음과 같습니다

[폐기 (
   메시지
)]
[폐기 (
   메시지
   ISERROR
)]

상기

  • 매개 변수메시지는프로젝트뿐만 아니라 오래된이 대안이 사용하는 어떤 이유를 설명하는 문자열입니다.
  • 매개 변수ISERROR는부울 값입니다. true의 경우, 컴파일러는 실수로 프로젝트를 사용해야합니다. 기본값은 (컴파일러가 경고를 생성) false입니다.

다음의 예는이 기능을 보여줍니다

시스템을 이용하여;
공공 MyClass 클래스
{
   [폐기 (true "로 OldMethod를 사용하지 마십시오 대신는 newMethod를 사용하여")]
   정적 무효 OldMethod ()
   { 
      Console.WriteLine는 ( "그것은 오래된 방법이다");
   }
   정적 무효는 newMethod ()
   { 
      Console.WriteLine는 ( "그것은 새로운 방법입니다"); 
   }
   공공 정적 무효 메인 ()
   {
      OldMethod ();
   }
}

프로그램을 컴파일 할 때, 컴파일러는 없다는 오류 메시지를 제공합니다 :

 OldMethod를 사용하지 않는 대신는 newMethod를 사용

만들기 사용자 지정 특성 (속성)

닷넷 프레임 워크는 선언적인 정보를 저장하는 사용자 지정 속성을 생성하고, 런타임에 검색 할 수 있습니다. 이 정보는 설계 기준에 기초하여 애플리케이션은 타겟 요소와 연관 될 필요가있다.

생성 및 사용 사용자 정의 기능은 네 단계를 포함한다 :

  • 문 사용자 지정 속성
  • 사용자 정의 속성을 구축
  • 대상 프로그램 요소에 사용자 지정 속성을 적용
  • 반사 특성을 통해 액세스

마지막 단계는 다양한 기호를 찾기 위해 메타 데이터를 판독하는 간단한 프로그램을 작성 포함한다. 메타 데이터는 다른 데이터를 설명하는 데 사용되는 데이터 및 정보이다. 이 프로그램은 런타임에 속성에 액세스 반사를 사용해야합니다. 우리는 다음 장에서 자세하게 논의 할 것이다.

문 사용자 지정 속성

새로운 사용자 지정 속성은System.Attribute 클래스에서 파생된다.예를 들면 :

// 버그 수정 사용자 정의 속성은 클래스에 할당 및 회원 [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = TRUE)]

공용 클래스 DeBugInfo : System.Attribute

위의 코드에서, 우리의DeBugInfo라는이름의 사용자 정의 속성을 선언했다.

사용자 정의 속성을 구축

우리가DeBugInfo라는이름의 사용자 정의 속성을구축하자,정보를 얻을 기능 디버거에 저장됩니다. 이는 다음과 같은 정보를 저장한다 :

  • 버그 코드 번호
  • 개발자는 버그의 이름을 인식
  • 코드의 마지막 검토 날짜
  • 문자열 메시지 저장소 개발자 표시

우리DeBugInfo처음 세 개의 클래스 (속성)에 대한 메시지를 저장하기 위해 세 개인 속성 정보 (속성) 및 공용 속성을 저장하는 데 사용됩니다. 그래서 버그 번호 개발자 이름과 검토의 날짜가 필요합니다 위치 DeBugInfo 클래스 (위치) 매개 변수는 메시지는 선택 이름 (이름) 매개 변수입니다.

각 속성은 하나 이상의 생성자가 있어야합니다. 필수 위치 생성자로 전달한다 (위치) 매개 변수입니다. 다음 코드는DeBugInfo 범주를보여줍니다

// 버그 수정 사용자 정의 속성은 클래스에 할당 및 회원 [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = TRUE)]

공용 클래스 DeBugInfo : System.Attribute
{
  개인 INT bugNo;
  개인 문자열 개발자;
  개인 문자열 lastReview;
  공공 문자열 메시지;

  공공 DeBugInfo (INT의 BG, 문자열 dev에, 문자열 D)
  {
      this.bugNo = BG;
      this.developer = dev에;
      this.lastReview = D;
  }

  공공 INT BugNo
  {
      취득
      {
          bugNo를 반환;
      }
  }
  공공 문자열 개발자
  {
      취득
      {
          개발자를 반환;
      }
  }
  공공 문자열 LastReview
  {
      취득
      {
          lastReview를 반환;
      }
  }
  공공 문자열 메시지
  {
      취득
      {
          메시지를 반환;
      }
      세트
      {
          메시지 = 값;
      }
  }
}

사용자 지정 속성을 적용

바로 목표 전에 속성을 배치하여이 기능을 적용합니다 :

[DeBugInfo (45, "자라 알리", "2012년 12월 8일"메시지 = "반환 형식이 일치하지")]
[DeBugInfo (49, "Nuha 알리", "2012년 10월 10일"메시지 = "사용하지 않는 변수")]
클래스 직사각형
{
  // 멤버 변수는 두 배 길이를 보호;
  이중 폭을 보호;
  공공 직사각형 (더블 리터, 더블 w)
  {
      길이 = 1;
      폭 = w;
  }
  [DeBugInfo (55, "자라 알리", "19/10/2012"
  메시지 = "반환 형식이 일치하지")]
  공공 이중의 getArea ()
  {
      길이 * 너비를 반환;
  }
  [DeBugInfo (56, "자라 알리", "19/10/2012")]
  공공 무효 표시 ()
  {
      Console.WriteLine ( "길이 : {0}", 길이);
      Console.WriteLine ( "폭 : {0}", 폭);
      Console.WriteLine ( "지역 : {0}"의 getArea ());
  }
}

다음 장에서, 우리는이 정보를 검색하기 위해 반사 클래스 개체를 사용합니다.