Atrybuty (C# i Visual Basic)
Atrybuty zapewniają zaawansowane metoda kojarzenia metadanelub deklaracyjne informacji z kodu (zestawów, typy, metody, właściwości i tak dalej).Po atrybut jest skojarzony z jednostką program, atrybut mogą być wyszukiwane w czasie wykonywania przy użyciu techniki o nazwie odbicie.Aby uzyskać więcej informacji, zobacz Odbicie (C# i Visual Basic).
Atrybuty mają następujące właściwości:
Atrybuty Dodawanie metadane do programu.Metadane informacji na temat typów określonych w programie.Wszystkie.NET zestawów zawierają określonego zestawu metadane opisano typy i członków typ zdefiniowany w zestaw.Można dodawać atrybutów niestandardowych, aby podać dodatkowe informacje, które jest wymagane.Aby uzyskać więcej informacji zobacz temat, Tworzenie niestandardowych atrybutów (C# i Visual Basic).
Można zastosować jeden lub więcej atrybutów całe zespoły, moduły lub mniejsze elementy programu, takich jak klasy i właściwości.
Atrybuty można zaakceptować argumenty w taki sam sposób jak metody i właściwości.
Program można zbadać swoich własnych metadane lub metadane w innych programach przy użyciu odbicie.Aby uzyskać więcej informacji, zobacz Dostęp do atrybutów przy użyciu odbicia (C# i Visual Basic).
Przy użyciu atrybutów
Atrybuty mogą być umieszczane w każdej deklaracji, chociaż konkretny atrybut może ograniczyć typy deklaracji, na których jest prawidłowy.W C# należy określić atrybut umieszczając nazwę atrybut, ujęty w nawiasy kwadratowe ([]), powyżej deklaracji jednostki, której dotyczy.W Visual Basic, atrybut jest ujęte w nawiasy ostre (< >).Musi pojawić się się bezpośrednio przed element, do którego jest ono stosowane, w tym samym wierszu.
W tym przykładzie SerializableAttribute atrybut jest używany do zastosowania specyficzne cechy charakterystyczne do klasy:
<System.Serializable()> Public Class SampleClass
' Objects of this type can be serialized.
End Class
[System.Serializable]
public class SampleClass
{
// Objects of this type can be serialized.
}
metoda z atrybut DllImportAttribute jest zadeklarowany następująco:
Imports System.Runtime.InteropServices
...
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
using System.Runtime.InteropServices;
...
[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static void SampleMethod();
Więcej niż jeden atrybut może być umieszczony w deklaracji:
Imports System.Runtime.InteropServices
...
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub
using System.Runtime.InteropServices;
...
void MethodA([In][Out] ref double x) { }
void MethodB([Out][In] ref double x) { }
void MethodC([In, Out] ref double x) { }
Niektóre atrybuty można określić więcej niż jeden raz dla danej jednostki.Przykładem takiego الهلال atrybut jest ConditionalAttribute:
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
[Conditional("DEBUG"), Conditional("TEST1")]
void TraceMethod()
{
// ...
}
[!UWAGA]
Umownie, wszystkie nazwy atrybut kończą się słowo "Atrybutu", aby odróżnić je od innych elementów.NET Framework.Jednakże nie trzeba określać sufiks atrybut , przy użyciu atrybutów w kodzie.Na przykład [DllImport] jest równoważne z [DllImportAttribute], ale DllImportAttribute jest rzeczywista nazwa atrybutw.NET Framework.
Parametry atrybutu
Wiele atrybutów mają parametry, które mogą być pozycyjne, nazwane lub nienazwane.Serwomechanizm parametry muszą być określone w określonej kolejności i nie mogą być pominięte; nazwane parametry są opcjonalne i może być określony w dowolnej kolejności.Serwomechanizm parametry są określane jako pierwsze.Na przykład te trzy atrybuty są równoważne:
[DllImport("user32.dll")]
[DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]
<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>
Pierwszy parametr, nazwa biblioteki DLL jest pozycyjne i zawsze były wyświetlane jako pierwsze; pozostałe o nazwie.W tym wypadku nazwanej zarówno domyślne parametry FALSE, więc można pominąć.Zajrzyj do dokumentacji poszczególnych atrybutdla informacji na temat wartości domyślne parametr .
Cele atrybutu
Docelowej atrybut jest jednostka, do której stosuje się atrybut .Na przykład atrybut może stosować do klasy, konkretnej metodalub całego zestaw.Domyślnie atrybut stosuje się do elementu, który go poprzedza.Ale można również jednoznacznie zidentyfikować, na przykład, czy atrybut jest stosowany do metodalub jej parametrlub swojej zwracanej wartości.
Aby jawnie określić obiekt docelowy atrybut , należy użyć następującej składni:
[target : attribute-list]
<target : attribute-list>
Lista możliwych target wartości jest pokazane w poniższej tabeli.
C# |
Visual Basic |
Stosuje się do |
---|---|---|
assembly |
Assembly |
Cały zestaw |
module |
Module |
Bieżącego zestaw moduł (które różni się od Visual Basic modułu) |
field |
Nie jest obsługiwana |
Pole klasy lub struktury |
event |
Nie jest obsługiwana |
Zdarzenia |
method |
Nie jest obsługiwana |
Metoda lub get i setAkcesory właściwość |
param |
Nie jest obsługiwana |
Parametry metody lub set właściwość akcesora parametrów |
property |
Nie jest obsługiwana |
Właściwość |
return |
Nie jest obsługiwana |
Zwraca wartość metoda, właściwośćindeksator, lub get właściwość akcesora |
type |
Nie jest obsługiwana |
Struct, klasy, interfejs, enum lub delegat |
Poniższy przykład pokazuje, jak zastosowanie atrybutów do zespołów i moduły.Aby uzyskać więcej informacji, zobacz Atrybuty wspólnych (C# i Visual Basic).
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
using System;
using System.Reflection;
[assembly: AssemblyTitleAttribute("Production assembly 4")]
[module: CLSCompliant(true)]
Poniższy przykład ilustruje sposób zastosować atrybuty do metody i parametrów metoda i metoda zwracają wartości w języku C#.
// default: applies to method
[SomeAttr]
int Method1() { return 0; }
// applies to method
[method: SomeAttr]
int Method2() { return 0; }
// applies to return value
[return: SomeAttr]
int Method3() { return 0; }
[!UWAGA]
Niezależnie od celów, na którym SomeAttr jest zdefiniowany jako prawidłowy, return docelowy musi zostać określona, nawet jeśli SomeAttr zostały określone zastosowanie tylko do zwracania wartości.Innymi słowy, kompilator nie będzie używać AttributeUsage informacji do celów niejednoznaczne atrybut rozpoznać .Aby uzyskać więcej informacji, zobacz AttributeUsage (C# i Visual Basic).
Typowe zastosowania atrybutów
Poniższa lista zawiera kilka typowych zastosowań atrybutów w kodzie:
Oznaczanie przy użyciu metody WebMethod atrybut w usługach sieć Web , aby wskazać metoda powinny być wpłacone przez protokół SOAP . Aby uzyskać więcej informacji, zobacz WebMethodAttribute.
Opisujące sposób parametrymetoda skierowaćprzy współpracy z kodem natywny . Aby uzyskać więcej informacji, zobacz MarshalAsAttribute.
Opisem właściwości COM dla klas, metody i interfejsy.
Za pomocą kod niezarządzany wywołania DllImportAttribute klasy.
Opisu zestaw z tytułu, wersja, opis lub znakiem towarowym.
Opisujące członków klasy do serializacji dla trwałości.
Opisujące sposób mapa między członków klasy i węzłów XML XML szeregowanie.
Opisujących wymagania dotyczące metod zabezpieczenia .
Określanie właściwości używany w celu wymuszenia zabezpieczenia.
Kontrolowanie optymalizacje przez kompilator dokładnie na czas (JIT), więc kod pozostaje można łatwo debugować.
Uzyskiwanie informacji na temat wywołującego metoda.
Sekcje pokrewne
Aby uzyskać więcej informacji zobacz: