>백엔드 개발 >C#.Net 튜토리얼 >C# 사용자 정의 속성

C# 사용자 정의 속성

王林
王林원래의
2024-09-03 15:07:191035검색

맞춤 속성이 무엇인지 알아보려면 속성을 이해해야 합니다. 특성은 런타임 시 C# 프로그램의 요소에 대한 추가 정보를 C# 컴파일러에 제공하는 메타데이터 확장입니다. 이러한 속성은 조건을 지정하거나 코드의 가독성과 효율성을 높이는 데 사용됩니다. C#(C 샤프)에는 사전 정의된 속성이 너무 많고 "사용자 정의 속성"이라는 새로운 사용자 속성을 생성할 수 있는 기능도 있습니다. 사용자 정의 클래스를 만들려면 시스템에서 클래스를 구성해야 합니다. 속성 클래스.

C#에서 사용자 정의 속성은 어떻게 작동하나요?

C# 사용자 정의 속성은 구성에 사용되는 사전 정의된 클래스를 기반으로 작동합니다. 맞춤 속성을 생성하는 방법을 단계별로 살펴보겠습니다. 맞춤 속성을 생성하는 단계:

1단계

AttributeUsageAttribute 태그 사용: 속성을 구성하는 데 사용되는 AttributeUsageAttribute 태그. 이 태그는 대상 속성이 무엇인지, 이것이 상속될 수 있는지 또는 속성의 여러 개체나 인스턴스가 존재할 수 있는지 여부에도 사용됩니다. 이 AttributeUsageAttribute 태그에는 3개의 기본 구성원이 있습니다

  • AttributeUsageAttribute( AttributeTargets.All)
  • AttributeUsage(AttributeTargets.All, Inherited = false)
  • AttributeUsage(AttributeTargets.Method, AllowMultiple = true)

1. AttributeUsageAttribute(AttributeTargets.All): AttributeTargets.All은 속성이 프로그램의 다른 모든 부분에 적용될 수 있음을 지정하는 반면, Attribute. 클래스는 클래스에 적용하고 AttributeTargets.Method 매개변수를 사용자 정의 메소드에 적용해야 함을 나타냅니다.

구문:

AttributeUsageAttribute( AttributeTargets.All)

2. AttributeUsage(AttributeTargets.All, Inherited = false): 이 AttributeUsageAttribute( AttributeTargets.All)는 상속된 멤버이며 사용자 정의 속성이 상속될 수 있는지 여부를 나타냅니다. Inherited = false는 true/false의 부울 값입니다. Inherited = true/false를 지정하지 않은 경우 기본값은 true입니다.

구문:

AttributeUsage(AttributeTargets.All, Inherited = false)

3. AttributeUsage(AttributeTargets.Method, AllowMultiple = true): 이 AllowMultiple 매개 변수는 속성의 개체가 두 개 이상 존재하는지 여부를 알려줍니다. 또한 부울 값도 사용합니다. 기본적으로 이 부울 값은 false입니다.

구문:

AttributeUsage(AttributeTargets.Method, AllowMultiple = true)

2단계

1. 속성 클래스 정의: 이것은 일반 클래스 정의와 비슷하거나 비슷합니다. 클래스 이름은 관례적으로 속성으로 끝납니다. 이 속성 클래스는 System에서 상속됩니다. 속성 클래스.

구문:

[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public class MyAttributeDefinition: Attribute
{
//some logic or methods
}

3단계

1. 속성 및 생성자 정의: 기본값을 설정하기 위한 다른 모든 클래스 생성자와 유사한 생성자를 정의하며 속성은 데이터베이스 연결 이름 정보, 정적 정보 등을 정의하는 데 사용됩니다.

구문 #1

public MyAttribute(dataType dataTypeValue)
{
this.dataTypeValue= dataTypeValue;
}
참고: 사용자 정의 속성에는 데이터 유형 변수를 가져오고 설정하는 속성이 있습니다.

구문 #2

public dataType Properties
{
get {return this.dataTypeValue;}
set {this.value = presentValue;}
}

C# 사용자 정의 속성 구현 예

다음은 언급된 예시입니다.

예시 #1

typeOf 연산자를 사용한 사용자 정의 속성

코드:

// including packages
using System;
using System.Reflection;
using System.Collections.Generic;
// Creating a custom class from Attribute class
class CustomAttribute : Attribute {
// private variables declaration
private string name;
private string company;
//parameterized class CustomAttribute constuctor
public CustomAttribute(string name, string company)
{
this.name = name;
this.company = company;
}
// method to display the fields by using reflection class
public static void AttributeDisplay(Type classType)
{
Console.WriteLine("All the Methods of the class {0} are", classType.Name);
//methods of the class for store all the attribute values
MethodInfo[] methods = classType.GetMethods();
//looping through method attribute values by using for loop
for (int i = 0; i < methods.GetLength(0); i++) {
//create the array to recieve all the custom attribute values
object[] attributesArray = methods[i].GetCustomAttributes(true);
// foreach loop to read the values through all attributes of the method
foreach(Attribute item in attributesArray)
{
if (item is CustomAttribute) {
//display the custom attribute values
CustomAttribute attributeObject = (CustomAttribute)item;
Console.WriteLine("{0} - {1}, {2} ", methods[i].Name,
attributeObject.name, attributeObject.company);
}
}
}
}
}
//Employer class to create employer fields
class Employer {
//employer fields declaration
int employeeID;
string name;
//Parameterized Employer class constructor
public Employer(int eID, string name)
{
this.employeeID = eID;
this.name = name;
}
// Applying the custom attribute for CustomAttribute for the  getId method
[CustomAttribute("Accessor Values", "Generates employee ID")] public int getEmployeeID()
{
return employeeID;
}
// Applying the custom attribute to CustomAttribute for the getName method
[CustomAttribute("Accessor Values", "Generates employee ID")] public string getName()
{
return name;
}
}
//create employee class
class Employee {
//Declaring variables of Employee
int employeeID;
string name;
//Parameterized Employee constructor
public Employee(int eID, string name)
{
this.employeeID = eID;
this.name = name;
}
// Applying the custom attribute CustomAttribute for the getEmployeeID method
[CustomAttribute("Accessor Values", "Generates employee ID")] public int getEmployeeID()
{
return employeeID;
}
// Applying the custom attribute CustomAttribute for the getName method
[CustomAttribute("Accessor Values", "Generates employee ID")] public string getName()
{
return name;
}
}
//create a class for display the output
public class Program {
// main method for the application
public static void Main(string[] args)
{
//calling static method for display typeOf employer class
CustomAttribute.AttributeDisplay(typeof(Employer));
Console.WriteLine();
//calling static method for display typeOf employee class
CustomAttribute.AttributeDisplay(typeof(Employee));
}
}

출력:

C# 사용자 정의 속성

예시 #2

직원 세부정보가 포함된 맞춤 속성

코드:

using System;
[AttributeUsage(AttributeTargets.All)]
class CustomAttribute : Attribute {
private string name;
private string designation;
// Constructor
public CustomAttribute(string name, string designation)
{
this.name = name;
this.designation = designation;
}
// setters and getters
public string Name
{
get { return name; }
}
// property to get designation
public string Action
{
get { return designation; }
}
}
class Employee {
private int empID;
private string empName;
private double salary;
[CustomAttribute("Modifier", "Assigns the Employee Details")]
public void setDetails(int id,string name, double sal)
{
empID = id;
empName = name;
salary=sal;
}
[CustomAttribute("It is an Accessor", "Displays empID")] public int getEmpID()
{
return empID;
}
[CustomAttribute("It is an Accessor", "Displays empID")] public string getEmpName()
{
return empName;
}
[CustomAttribute("It is an Accessor", "Displays empID")] public double getSalary()
{
return salary;
}
}
public class EmployeeDetailsOut {
// main method for run the application
//main method modifier must be public
public static void Main(string[] args)
{
Employee emp = new Employee();
emp.setDetails(2424, "Paramesh", 400000.00);
Console.WriteLine("Employee Details");
Console.WriteLine("Employee ID Number : " + emp.getEmpID());
Console.WriteLine("Employee Name : " + emp.getEmpName());
Console.WriteLine("Employee Salary : " + emp.getSalary());
Console.WriteLine("\n");
Employee emp1 = new Employee();
emp1.setDetails(2423, "Amardeep", 600000.00);
Console.WriteLine("Employee Details");
Console.WriteLine("Employee ID Number : " + emp1.getEmpID());
Console.WriteLine("Employee Name : " + emp1.getEmpName());
Console.WriteLine("Employee Salary : " + emp1.getSalary());
}
}

출력:

C# 사용자 정의 속성

예시 #3

맞춤 속성 시연

코드:

using System;
using System.Diagnostics;
public class DemonstrationOfCustomAttribute {
[Conditional("DEBUG")]
public static void getMyOut(string msg) {
Console.WriteLine(msg);
}
}
public class Test {
static void firstMethod() {
DemonstrationOfCustomAttribute.getMyOut("I am first method.");
secondMethod();
}
static void secondMethod() {
DemonstrationOfCustomAttribute.getMyOut("I am second method.");
}
public static void Main() {
DemonstrationOfCustomAttribute.getMyOut("I am in main method.");
firstMethod();
}
}

출력:

C# 사용자 정의 속성

결론

C#의 사용자 정의 속성은 클래스를 사용하여 선언된 구현을 정의하는 데 사용됩니다. 이 사용자 정의 특성 구현은 3단계, 즉 AttributeUsageAttribute, AttributeUsage(AttributeTargets.All, Inherited = false 및 AttributeUsage(AttributeTargets.Method, AllowMultiple = true))를 사용하여 달성할 수 있습니다.

위 내용은 C# 사용자 정의 속성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:C# 명령줄 인수다음 기사:C# 명령줄 인수