C# 튜토리얼login
C# 튜토리얼
작가:php.cn  업데이트 시간:2022-04-11 14:06:23

C# 속성



속성 은 런타임 시 프로그램의 다양한 요소(예: 클래스, 메서드, 구조, 열거형, 구성 요소 등)의 동작 정보를 전달하는 데 사용되는 선언적 태그입니다. 속성을 사용하여 프로그램에 선언적 정보를 추가할 수 있습니다. 선언적 태그는 해당 태그가 적용되는 요소 앞에 있는 대괄호([ ])로 설명됩니다.

속성은 컴파일러 지침 및 주석, 설명, 메서드, 클래스 및 기타 정보와 같은 메타데이터를 추가하는 데 사용됩니다. .Net 프레임워크는 사전 정의된기능과 맞춤기능이라는 두 가지 유형의 기능을 제공합니다.

속성 지정(Attribute)

속성(Attribute)을 지정하는 구문은 다음과 같습니다.

[attribute(positional_parameters, name_parameter = value, ...)]
element

속성(Attribute)의 이름과 값은 대괄호 안에 지정되며 해당 속성이 적용되는 요소 앞에 배치됩니다. positional_parameters는 필수 정보를 지정하고 name_parameter는 선택적 정보를 지정합니다.

사전 정의된 속성(속성)

.Net 프레임워크는 세 가지 사전 정의된 속성을 제공합니다.

  • AttributeUsage

  • Conditional

  • Obsolete

AttributeUsage

사전 정의 속성AttributeUsage 설명 사용자 정의 사용 방법 속성 클래스. 기능을 적용할 수 있는 항목 유형을 지정합니다.

이 기능을 지정하는 구문은 다음과 같습니다.

[AttributeUsage(
   validon,
   AllowMultiple=allowmultiple,
   Inherited=inherited
)]

위치:

  • validon 매개변수는 기능이 배치될 수 있는 언어 요소를 지정합니다. 열거자 AttributeTargets 값의 조합입니다. 기본값은 AttributeTargets.All입니다.

  • 매개변수 allowmultiple(선택 사항)는 기능의 AllowMultiple 속성에 부울 값을 제공합니다. true인 경우 속성은 다목적입니다. 기본값은 false(일회용)입니다.

  • Parameter inherited(선택 사항) 이 기능의 Inherited 속성에 부울 값을 제공합니다. true인 경우 이 특성은 파생 클래스에서 상속될 수 있습니다. 기본값은 false(상속되지 않음)입니다.

예:

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

Conditional

이 사전 정의된 속성은 실행이 최상위 전처리기 식별자에 따라 달라지는 조건부 메서드를 표시합니다.

Debug 또는 Trace와 같이 지정된 값에 따라 메서드 호출의 조건부 컴파일이 발생합니다. 예를 들어, 코드를 디버깅할 때 변수 값을 표시합니다.

이 기능을 지정하는 구문은 다음과 같습니다.

[Conditional(
   conditionalSymbol
)]

예:

[Conditional("DEBUG")]

다음 예에서는 이 기능을 보여줍니다.

#define DEBUG
using System;
using System.Diagnostics;
public class Myclass
{
    [Conditional("DEBUG")]
    public static void Message(string msg)
    {
        Console.WriteLine(msg);
    }
}
class Test
{
    static void function1()
    {
        Myclass.Message("In Function 1.");
        function2();
    }
    static void function2()
    {
        Myclass.Message("In Function 2.");
    }
    public static void Main()
    {
        Myclass.Message("In Main function.");
        function1();
        Console.ReadKey();
    }
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

In Main function
In Function 1
In Function 2

Obsolete

이 사전 정의된 속성은 사용해서는 안 되는 프로그램 엔터티를 표시합니다. 이를 통해 컴파일러에게 특정 대상 요소를 삭제하도록 지시할 수 있습니다. 예를 들어, 클래스에서 새 메서드가 사용되지만 여전히 클래스에 이전 메서드를 유지하려는 경우 이전 메서드 대신 새 메서드를 사용해야 한다는 메시지를 표시하여 해당 메서드를 더 이상 사용되지 않음으로 표시할 수 있습니다. ).

이 기능을 지정하는 구문은 다음과 같습니다.

[Obsolete(
   message
)]
[Obsolete(
   message,
   iserror
)]

위치:

  • 매개변수 message는 해당 항목이 더 이상 사용되지 않는 이유와 대신 사용할 항목을 설명하는 문자열입니다.

  • 매개변수 iserror는 부울 값입니다. 이 값이 true이면 컴파일러는 이 항목의 사용을 오류로 처리해야 합니다. 기본값은 false입니다(컴파일러가 경고를 생성함).

다음 예에서는 이 기능을 보여줍니다.

using System;
public class MyClass
{
   [Obsolete("Don't use OldMethod, use NewMethod instead", true)]
   static void OldMethod()
   { 
      Console.WriteLine("It is the old method");
   }
   static void NewMethod()
   { 
      Console.WriteLine("It is the new method"); 
   }
   public static void Main()
   {
      OldMethod();
   }
}

이 프로그램을 컴파일하려고 하면 컴파일러에서 다음과 같은 오류 메시지를 표시합니다.

 Don't use OldMethod, use NewMethod instead

사용자 정의 속성 생성(속성)

.Net 프레임워크를 사용하면 런타임 시 검색할 수 있는 선언적 정보를 저장하는 사용자 정의 속성을 생성할 수 있습니다. 이 정보는 설계 기준 및 애플리케이션 요구 사항에 따라 모든 대상 요소와 연관될 수 있습니다.

사용자 정의 속성 생성 및 사용은 4단계로 구성됩니다.

  • 사용자 정의 속성 선언

  • 사용자 정의 속성 구축

  • 대상 프로그램 요소에 사용자 정의 속성 적용

  • 리플렉션을 통해 속성 액세스

마지막 단계는 다양한 기호를 찾기 위해 메타데이터를 읽는 간단한 프로그램을 작성하는 것입니다. 메타데이터는 다른 데이터를 설명하는 데 사용되는 데이터 및 정보입니다. 프로그램은 런타임 시 속성에 액세스하기 위해 리플렉션을 사용해야 합니다. 이에 대해서는 다음 장에서 자세히 논의하겠습니다.

사용자 정의 속성 선언

새로운 사용자 정의 속성은 System.Attribute 클래스에서 파생되어야 합니다. 예:

// 一个自定义特性 BugFix 被赋给类及其成员
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute

위 코드에서는 DeBugInfo라는 사용자 정의 속성을 선언했습니다.

사용자 정의 속성 구축

디버거에서 얻은 정보를 저장할 DeBugInfo라는 사용자 정의 속성을 구축해 보겠습니다. 여기에는 다음 정보가 저장됩니다.

  • 버그의 코드 번호

  • 버그를 식별한 개발자의 이름

  • 코드가 마지막으로 검토된 날짜

  • 버그를 저장하는 문자열 메시지 개발자 태그

우리의 DeBugInfo 클래스에는 처음 세 가지 정보를 저장하는 세 가지 개인 속성(속성)과 메시지를 저장하는 하나의 공용 속성(속성)이 있습니다. 따라서 버그 번호, 개발자 이름 및 검토 날짜는 DeBugInfo 클래스의 필수 위치 매개변수가 되고 메시지는 선택적인 명명된 매개변수가 됩니다.

각 기능에는 생성자가 하나 이상 있어야 합니다. 필수 위치 매개변수는 생성자를 통해 전달되어야 합니다. 다음 코드는 DeBugInfo 클래스를 보여줍니다.

// 一个自定义特性 BugFix 被赋给类及其成员
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute
{
  private int bugNo;
  private string developer;
  private string lastReview;
  public string message;

  public DeBugInfo(int bg, string dev, string d)
  {
      this.bugNo = bg;
      this.developer = dev;
      this.lastReview = d;
  }

  public int BugNo
  {
      get
      {
          return bugNo;
      }
  }
  public string Developer
  {
      get
      {
          return developer;
      }
  }
  public string LastReview
  {
      get
      {
          return lastReview;
      }
  }
  public string Message
  {
      get
      {
          return message;
      }
      set
      {
          message = value;
      }
  }
}

사용자 정의 속성 적용

대상 바로 앞에 속성을 배치하여 적용합니다.

[DeBugInfo(45, "Zara Ali", "12/8/2012", Message = "Return type mismatch")]
[DeBugInfo(49, "Nuha Ali", "10/10/2012", Message = "Unused variable")]
class Rectangle
{
  // 成员变量
  protected double length;
  protected double width;
  public Rectangle(double l, double w)
  {
      length = l;
      width = w;
  }
  [DeBugInfo(55, "Zara Ali", "19/10/2012",
  Message = "Return type mismatch")]
  public double GetArea()
  {
      return length * width;
  }
  [DeBugInfo(56, "Zara Ali", "19/10/2012")]
  public void Display()
  {
      Console.WriteLine("Length: {0}", length);
      Console.WriteLine("Width: {0}", width);
      Console.WriteLine("Area: {0}", GetArea());
  }
}

다음 장에서는 Reflection 클래스 개체를 사용하여 이 정보를 검색합니다.

PHP 중국어 웹사이트