Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык 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 позволяет создавать настраиваемые атрибуты, которые можно использовать для хранения декларативной информации и извлекать во время выполнения. Эта информация может быть связана с любым целевым элементом в зависимости от критериев проектирования и потребностей приложения.

Создание и использование настраиваемых атрибутов включает четыре шага —

Последний шаг включает в себя написание простой программы для чтения метаданных для поиска различных обозначений. Метаданные — это данные о данных или информации, используемые для описания других данных. Эта программа должна использовать отражения для доступа к атрибутам во время выполнения. Об этом мы поговорим в следующей главе.

Объявление пользовательского атрибута

Новый настраиваемый атрибут должен быть получен из 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. , в котором хранится информация, полученная при отладке любой программы. Пусть он хранит следующую информацию —

Информация об ошибках класс имеет три частных свойства для хранения первых трех сведений и общедоступное свойство для хранения сообщения. Следовательно, номер ошибки, имя разработчика и дата проверки являются позиционными параметрами класса 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# — значения NULL
  3. Ферро-Титанит® Кромони
  4. AgCu20
  5. DIN 1.7734 4
  6. DIN 1.7734 5
  7. DIN 1.7734 6
  8. PtNi10
  9. PtIr10
  10. Корропласт Пластина