산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# - 속성

속성 프로그램에서 클래스, 메서드, 구조, 열거자, 어셈블리 등과 같은 다양한 요소의 동작에 대한 정보를 런타임에 전달하는 데 사용되는 선언적 태그입니다. 속성을 사용하여 프로그램에 선언적 정보를 추가할 수 있습니다. 선언적 태그는 사용된 요소 위에 있는 대괄호([ ])로 표시됩니다.

속성은 컴파일러 명령과 같은 메타데이터와 주석, 설명, 메서드 및 클래스와 같은 기타 정보를 프로그램에 추가하는 데 사용됩니다. .Net Framework는 두 가지 유형의 속성을 제공합니다. 사전 정의된 속성 및 맞춤 제작 속성.

속성 지정

속성을 지정하는 구문은 다음과 같습니다 -

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

속성의 이름과 값은 속성이 적용되는 요소 앞의 대괄호 안에 지정됩니다. 위치 매개변수는 필수 정보를 지정하고 이름 매개변수는 선택적 정보를 지정합니다.

사전 정의된 속성

.Net Framework는 미리 정의된 세 가지 속성을 제공합니다.

속성 사용

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

이 속성을 지정하는 구문은 다음과 같습니다 -

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

어디,

예를 들어,

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

조건부

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

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

이 속성을 지정하는 구문은 다음과 같습니다 -

[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 (
   message
)]

[Obsolete (
   message,
   iserror
)]

어디,

다음 프로그램은 이것을 보여줍니다 -

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 Framework를 사용하면 선언적 정보를 저장하는 데 사용할 수 있고 런타임에 검색할 수 있는 사용자 지정 특성을 만들 수 있습니다. 이 정보는 설계 기준 및 적용 요구 사항에 따라 모든 대상 요소와 관련될 수 있습니다.

사용자 정의 속성 생성 및 사용에는 4단계가 포함됩니다. -

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

사용자 정의 속성 선언

새 사용자 정의 속성은 System.Attribute에서 파생되어야 합니다. 수업. 예를 들어,

//a custom attribute BugFix to be assigned to a class and its members
[AttributeUsage(
   AttributeTargets.Class |
   AttributeTargets.Constructor |
   AttributeTargets.Field |
   AttributeTargets.Method |
   AttributeTargets.Property,
   AllowMultiple = true)]

public class DeBugInfo : System.Attribute

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

사용자 정의 속성 구성

DeBugInfo라는 사용자 정의 속성을 구성해 보겠습니다. , 모든 프로그램을 디버깅하여 얻은 정보를 저장합니다. 다음 정보를 저장하도록 합니다 -

디버그 정보 클래스에는 처음 3개의 정보를 저장하기 위한 3개의 개인 속성과 메시지를 저장하기 위한 공용 속성이 있습니다. 따라서 버그 번호, 개발자 이름 및 검토 날짜는 DeBugInfo 클래스의 위치 매개변수이며 메시지는 선택적 또는 명명된 매개변수입니다.

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

//a custom attribute BugFix to be assigned to a class and its members
[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 {
   //member variables
   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 클래스 개체를 사용하여 속성 정보를 검색합니다.


C 언어

  1. Java 8 - 선택적 클래스
  2. C# - Nullable
  3. Ferro-Titanit® 크로모니
  4. AgCu20
  5. DIN 1.7734 4
  6. DIN 1.7734 5
  7. DIN 1.7734 6
  8. PtNi10
  9. PtIr10
  10. 부식질판