MemberInfo.IsDefined(Type, Boolean) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při přepsání v odvozené třídě označuje, zda jeden nebo více atributů zadaného typu nebo jeho odvozených typů je použit na tohoto člena.
public:
abstract bool IsDefined(Type ^ attributeType, bool inherit);
public abstract bool IsDefined (Type attributeType, bool inherit);
abstract member IsDefined : Type * bool -> bool
Public MustOverride Function IsDefined (attributeType As Type, inherit As Boolean) As Boolean
Parametry
- attributeType
- Type
Typ vlastního atributu, který chcete vyhledat. Hledání zahrnuje odvozené typy.
- inherit
- Boolean
true
prohledat řetězec dědičnosti tohoto člena najít atributy; v opačném případě . false
Tento parametr je ignorován pro vlastnosti a události.
Návraty
true
pokud se na tohoto člena attributeType
použije jedna nebo více instancí nebo některý z jeho odvozených typů; v opačném případě false
.
Implementuje
Příklady
Následující příklad určuje, zda je zadaný atribut použit na zadaného člena.
using namespace System;
using namespace System::Reflection;
// Define a custom attribute with one named parameter.
[AttributeUsage(AttributeTargets::All)]
public ref class MyAttribute: public Attribute
{
private:
String^ myName;
public:
MyAttribute( String^ name )
{
myName = name;
}
property String^ Name
{
String^ get()
{
return myName;
}
}
};
// Define a class that has the custom attribute associated with one of its members.
public ref class MyClass1
{
public:
[MyAttribute("This is an example attribute.")]
void MyMethod( int i ){}
};
int main()
{
try
{
// Get the type of MyClass1.
Type^ myType = MyClass1::typeid;
// Get the members associated with MyClass1.
array<MemberInfo^>^myMembers = myType->GetMembers();
// Display the attributes for each of the members of MyClass1.
for ( int i = 0; i < myMembers->Length; i++ )
{
// Display the attribute if it is of type MyAttribute.
if ( myMembers[ i ]->IsDefined( MyAttribute::typeid, false ) )
{
array<Object^>^myAttributes = myMembers[ i ]->GetCustomAttributes( MyAttribute::typeid, false );
Console::WriteLine( "\nThe attributes of type MyAttribute for the member {0} are: \n", myMembers[ i ] );
for ( int j = 0; j < myAttributes->Length; j++ )
// Display the value associated with the attribute.
Console::WriteLine( "The value of the attribute is : \"{0}\"",
(safe_cast<MyAttribute^>(myAttributes[ j ]))->Name );
}
}
}
catch ( Exception^ e )
{
Console::WriteLine( "An exception occurred: {0}", e->Message );
}
}
using System;
using System.Reflection;
// Define a custom attribute with one named parameter.
[AttributeUsage(AttributeTargets.All)]
public class MyAttribute : Attribute
{
private string myName;
public MyAttribute(string name)
{
myName = name;
}
public string Name
{
get
{
return myName;
}
}
}
// Define a class that has the custom attribute associated with one of its members.
public class MyClass1
{
[MyAttribute("This is an example attribute.")]
public void MyMethod(int i)
{
return;
}
}
public class MemberInfo_GetCustomAttributes_IsDefined
{
public static void Main()
{
try
{
// Get the type of MyClass1.
Type myType = typeof(MyClass1);
// Get the members associated with MyClass1.
MemberInfo[] myMembers = myType.GetMembers();
// Display the attributes for each of the members of MyClass1.
for(int i = 0; i < myMembers.Length; i++)
{
// Display the attribute if it is of type MyAttribute.
if(myMembers[i].IsDefined(typeof(MyAttribute), false))
{
Object[] myAttributes = myMembers[i].GetCustomAttributes(typeof(MyAttribute), false);
Console.WriteLine("\nThe attributes of type MyAttribute for the member {0} are: \n",
myMembers[i]);
for(int j = 0; j < myAttributes.Length; j++)
// Display the value associated with the attribute.
Console.WriteLine("The value of the attribute is : \"{0}\"",
((MyAttribute)myAttributes[j]).Name);
}
}
}
catch(Exception e)
{
Console.WriteLine("An exception occurred: {0}", e.Message);
}
}
}
Imports System.Reflection
' Define a custom attribute with one named parameter.
<AttributeUsage(AttributeTargets.All)> Public Class MyAttribute
Inherits Attribute
Private myName As String
Public Sub New(ByVal name As String)
myName = name
End Sub
Public ReadOnly Property Name() As String
Get
Return myName
End Get
End Property
End Class
' Define a class that has the custom attribute associated with one of its members.
Public Class MyClass1
<MyAttribute("This is an example attribute.")> Public Sub MyMethod(ByVal i As Integer)
Return
End Sub
End Class
Public Class MemberInfo_GetCustomAttributes_IsDefined
Public Shared Sub Main()
Try
' Get the type of MyClass1.
Dim myType As Type = GetType(MyClass1)
' Get the members associated with MyClass1.
Dim myMembers As MemberInfo() = myType.GetMembers()
' Display the attributes for each of the members of MyClass1.
Dim i As Integer
For i = 0 To myMembers.Length - 1
' Display the attribute if it is of type MyAttribute.
If myMembers(i).IsDefined(GetType(MyAttribute), False) Then
Dim myAttributes As [Object]() = myMembers(i).GetCustomAttributes(GetType(MyAttribute), False)
Console.WriteLine(ControlChars.Cr + "The attributes of type MyAttribute for the member {0} are: " + ControlChars.Cr, myMembers(i))
Dim j As Integer
For j = 0 To myAttributes.Length - 1
' Display the value associated with the attribute.
Console.WriteLine("The value of the attribute is : ""{0}""", CType(myAttributes(j), MyAttribute).Name)
Next j
End If
Next i
Catch e As Exception
Console.WriteLine("An exception occurred: {0}", e.Message)
End Try
End Sub
End Class
Poznámky
Tato metoda ignoruje inherit
parametr pro vlastnosti a události. Chcete-li vyhledat v řetězu dědičnosti atributy vlastností a událostí, použijte příslušná Attribute.IsDefined přetížení metody.
Poznámka
V rozhraní .NET Framework verze 2.0 tato metoda vrátí true
, pokud typ, metoda nebo konstruktor má atributy zabezpečení uložené v novém formátu metadat. Sestavení kompilovaná s verzí 2.0 používají tento formát. Dynamická sestavení a sestavení kompilovaná s dřívějšími verzemi rozhraní .NET Framework používají starý formát XML. Viz Generování deklarativních atributů zabezpečení.