LogicalMethodInfo.GetCustomAttribute(Type) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
如果已套用任何自訂屬性至型別,則傳回第一個套用至型別的自訂屬性。
public:
System::Object ^ GetCustomAttribute(Type ^ type);
public object GetCustomAttribute (Type type);
member this.GetCustomAttribute : Type -> obj
Public Function GetCustomAttribute (type As Type) As Object
參數
傳回
Object,包含套用至 type
參數的第一個自訂屬性。
例外狀況
無法載入自訂屬性型別。
範例
#using <System.Web.Services.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Web::Services::Protocols;
// Define a custom attribute with one named parameter.
[AttributeUsage(AttributeTargets::Method|AttributeTargets::ReturnValue,
AllowMultiple=true)]
public ref class MyAttribute: public Attribute
{
private:
String^ myName;
public:
MyAttribute( String^ name )
{
myName = name;
}
property String^ Name
{
String^ get()
{
return myName;
}
}
};
public ref class MyService
{
public:
[MyAttribute("This is the first sample attribute")]
[MyAttribute("This is the second sample attribute")]
[returnvalue:MyAttribute("This is the return sample attribute")]
int Add( int xValue, int yValue )
{
return (xValue + yValue);
}
};
int main()
{
Type^ myType = MyService::typeid;
MethodInfo^ myMethodInfo = myType->GetMethod( "Add" );
// Create a synchronous 'LogicalMethodInfo' instance.
array<MethodInfo^>^temparray = {myMethodInfo};
LogicalMethodInfo^ myLogicalMethodInfo = (LogicalMethodInfo::Create( temparray, LogicalMethodTypes::Sync ))[ 0 ];
// Display the method for which the attributes are being displayed.
Console::WriteLine( "\nDisplaying the attributes for the method : {0}\n", myLogicalMethodInfo->MethodInfo );
// Displaying a custom attribute of type 'MyAttribute'
Console::WriteLine( "\nDisplaying attribute of type 'MyAttribute'\n" );
Object^ attribute = myLogicalMethodInfo->GetCustomAttribute( MyAttribute::typeid );
Console::WriteLine( (dynamic_cast<MyAttribute^>(attribute))->Name );
// Display all custom attribute of type 'MyAttribute'.
Console::WriteLine( "\nDisplaying all attributes of type 'MyAttribute'\n" );
array<Object^>^attributes = myLogicalMethodInfo->GetCustomAttributes( MyAttribute::typeid );
for ( int i = 0; i < attributes->Length; i++ )
Console::WriteLine( (dynamic_cast<MyAttribute^>(attributes[ i ]))->Name );
// Display all return attributes of type 'MyAttribute'.
Console::WriteLine( "\nDisplaying all return attributes of type 'MyAttribute'\n" );
ICustomAttributeProvider^ myCustomAttributeProvider = myLogicalMethodInfo->ReturnTypeCustomAttributeProvider;
if ( myCustomAttributeProvider->IsDefined( MyAttribute::typeid, true ) )
{
attributes = myCustomAttributeProvider->GetCustomAttributes( true );
for ( int i = 0; i < attributes->Length; i++ )
if ( attributes[ i ]->GetType()->Equals( MyAttribute::typeid ) )
Console::WriteLine( (dynamic_cast<MyAttribute^>(attributes[ i ]))->Name );
}
// Display all the custom attributes of type 'MyAttribute'.
Console::WriteLine( "\nDisplaying all attributes of type 'MyAttribute'\n" );
myCustomAttributeProvider = myLogicalMethodInfo->CustomAttributeProvider;
if ( myCustomAttributeProvider->IsDefined( MyAttribute::typeid, true ) )
{
attributes = myCustomAttributeProvider->GetCustomAttributes( true );
for ( int i = 0; i < attributes->Length; i++ )
if ( attributes[ i ]->GetType()->Equals( MyAttribute::typeid ) )
Console::WriteLine( (dynamic_cast<MyAttribute^>(attributes[ i ]))->Name );
}
}
using System;
using System.Reflection;
using System.Web.Services.Protocols;
// Define a custom attribute with one named parameter.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.ReturnValue, AllowMultiple=true)]
public class MyAttribute : Attribute
{
private string myName;
public MyAttribute(string name)
{
myName = name;
}
public string Name
{
get
{
return myName;
}
}
}
public class MyService
{
[MyAttribute("This is the first sample attribute")]
[MyAttribute("This is the second sample attribute")]
[return: MyAttribute("This is the return sample attribute")]
public int Add(int xValue, int yValue)
{
return (xValue + yValue);
}
}
public class LogicalMethodInfo_GetCustomAttribute
{
public static void Main()
{
Type myType = typeof(MyService);
MethodInfo myMethodInfo = myType.GetMethod("Add");
// Create a synchronous 'LogicalMethodInfo' instance.
LogicalMethodInfo myLogicalMethodInfo =
(LogicalMethodInfo.Create(new MethodInfo[] {myMethodInfo},
LogicalMethodTypes.Sync))[0];
// Display the method for which the attributes are being displayed.
Console.WriteLine("\nDisplaying the attributes for the method : {0}\n",
myLogicalMethodInfo.MethodInfo);
// Displaying a custom attribute of type 'MyAttribute'
Console.WriteLine("\nDisplaying attribute of type 'MyAttribute'\n");
object attribute = myLogicalMethodInfo.GetCustomAttribute(typeof(MyAttribute));
Console.WriteLine(((MyAttribute)attribute).Name);
// Display all custom attribute of type 'MyAttribute'.
Console.WriteLine("\nDisplaying all attributes of type 'MyAttribute'\n");
object[] attributes = myLogicalMethodInfo.GetCustomAttributes(typeof(MyAttribute));
for(int i = 0; i < attributes.Length; i++)
Console.WriteLine(((MyAttribute)attributes[i]).Name);
// Display all return attributes of type 'MyAttribute'.
Console.WriteLine("\nDisplaying all return attributes of type 'MyAttribute'\n");
ICustomAttributeProvider myCustomAttributeProvider =
myLogicalMethodInfo.ReturnTypeCustomAttributeProvider;
if(myCustomAttributeProvider.IsDefined(typeof(MyAttribute), true))
{
attributes = myCustomAttributeProvider.GetCustomAttributes(true);
for(int i = 0; i < attributes.Length; i++)
if(attributes[i].GetType().Equals(typeof(MyAttribute)))
Console.WriteLine(((MyAttribute)attributes[i]).Name);
}
// Display all the custom attributes of type 'MyAttribute'.
Console.WriteLine("\nDisplaying all attributes of type 'MyAttribute'\n");
myCustomAttributeProvider = myLogicalMethodInfo.CustomAttributeProvider;
if(myCustomAttributeProvider.IsDefined(typeof(MyAttribute), true))
{
attributes = myCustomAttributeProvider.GetCustomAttributes(true);
for(int i = 0; i < attributes.Length; i++)
if(attributes[i].GetType().Equals(typeof(MyAttribute)))
Console.WriteLine(((MyAttribute)attributes[i]).Name);
}
}
}
Imports System.Reflection
Imports System.Web.Services.Protocols
' Define a custom attribute with one named parameter.
<AttributeUsage(AttributeTargets.Method Or AttributeTargets.ReturnValue, AllowMultiple := True)> _
Public Class MyAttribute
Inherits Attribute
Private myName As String
Public Sub New(name As String)
myName = name
End Sub
Public ReadOnly Property Name() As String
Get
Return myName
End Get
End Property
End Class
Public Class MyService
<MyAttribute("This is the first sample attribute"), MyAttribute("This is the second sample attribute")> _
Public Function Add(xValue As Integer, yValue As Integer) _
As<MyAttribute("This is the return sample attribute")> Integer
Return xValue + yValue
End Function 'Add
End Class
Public Class LogicalMethodInfo_GetCustomAttribute
Public Shared Sub Main()
Dim myType As Type = GetType(MyService)
Dim myMethodInfo As MethodInfo = myType.GetMethod("Add")
' Create a synchronous 'LogicalMethodInfo' instance.
Dim myLogicalMethodInfo As LogicalMethodInfo = _
LogicalMethodInfo.Create(New MethodInfo() {myMethodInfo}, LogicalMethodTypes.Sync)(0)
' Display the method for which the attributes are being displayed.
Console.WriteLine(ControlChars.NewLine + "Displaying the attributes for the method : {0}" + _
ControlChars.NewLine, myLogicalMethodInfo.MethodInfo.ToString())
' Displaying a custom attribute of type 'MyAttribute'
Console.WriteLine(ControlChars.NewLine + "Displaying attribute of type 'MyAttribute'" + _
ControlChars.NewLine)
Dim attribute As Object = myLogicalMethodInfo.GetCustomAttribute(GetType(MyAttribute))
Console.WriteLine(CType(attribute, MyAttribute).Name)
' Display all custom attribute of type 'MyAttribute'.
Console.WriteLine(ControlChars.NewLine + "Displaying all attributes of type 'MyAttribute'" + _
ControlChars.NewLine)
Dim attributes As Object() = myLogicalMethodInfo.GetCustomAttributes(GetType(MyAttribute))
Dim i As Integer
For i = 0 To attributes.Length - 1
Console.WriteLine(CType(attributes(i), MyAttribute).Name)
Next i
' Display all return attributes of type 'MyAttribute'.
Console.WriteLine(ControlChars.NewLine + "Displaying all return attributes of type 'MyAttribute'" + _
ControlChars.NewLine)
Dim myCustomAttributeProvider As ICustomAttributeProvider = _
myLogicalMethodInfo.ReturnTypeCustomAttributeProvider
If myCustomAttributeProvider.IsDefined(GetType(MyAttribute), True) Then
attributes = myCustomAttributeProvider.GetCustomAttributes(True)
For i = 0 To attributes.Length - 1
If attributes(i).GetType().Equals(GetType(MyAttribute)) Then
Console.WriteLine(CType(attributes(i), MyAttribute).Name)
End If
Next i
End If ' Display all the custom attributes of type 'MyAttribute'.
Console.WriteLine(ControlChars.NewLine + "Displaying all attributes of type 'MyAttribute'" + _
ControlChars.NewLine)
myCustomAttributeProvider = myLogicalMethodInfo.CustomAttributeProvider
If myCustomAttributeProvider.IsDefined(GetType(MyAttribute), True) Then
attributes = myCustomAttributeProvider.GetCustomAttributes(True)
For i = 0 To attributes.Length - 1
If attributes(i).GetType().Equals(GetType(MyAttribute)) Then
Console.WriteLine(CType(attributes(i), MyAttribute).Name)
End If
Next i
End If
End Sub
End Class