Принципы объектно-ориентированного программирования

         

Атрибуты однократного и многократного использования



Атрибуты однократного и многократного использования

AttributeUsage позволяет задать атрибуты для одно- и многократного применения. Это определит, как много раз один атрибут может быть задействован с одним полем. По умолчанию все атрибуты используются однократно. Это означает, что при компиляции следующего кода возникнет ошибка компилятора:

using System;

using System.Reflection;

public class SingleUseAttribute : Attribute {



public SingleUseAttribute(String str)

{

> }

// ОШИБКА: возникает ошибка компилятора "duplicate attribute".

[SingleUse("abc")]

[SingleUse("def")]

class MyClass

{

}

class SinglellseApp {

public static void Main()

{

} }

Чтобы исправить эту ошибку, укажите в строке Attribute Usage, что вы хотите разрешить многократное использование атрибута с данным типом. Этот код будет работать:

using System;

using System.Reflection;

[AttributeUsage(AttributeTargets.All, AllowMultiple=true)]

public class SingleUseAttribute : Attribute

{

public SingleUseAttribute(String str)

{

}

>

[SingleUse("abc")]

[SingleUse("def")]

class MyClass

{

>

class MultiUseApp {

public static void Main()

{ } }

Практическим примером использования этого подхода служит атрибут RegistryKeyAttribute (см. раздел "Определение атрибутов"). Поскольку вполне реально, что поле может быть сохранено в нескольких местах реестра, можете прикрепить атрибут Attribute Usage с именованным параметром AllowMultiple, как показано в примере выше.

 

Содержание раздела