Type.GetDefaultMembers メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Type が設定されている現在の DefaultMemberAttribute に定義されているメンバーを検索します。
public:
virtual cli::array <System::Reflection::MemberInfo ^> ^ GetDefaultMembers();
public virtual System.Reflection.MemberInfo[] GetDefaultMembers ();
abstract member GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
override this.GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
Public Overridable Function GetDefaultMembers () As MemberInfo()
戻り値
現在の MemberInfo のすべての既定メンバーを表す Type オブジェクトの配列。
または
現在の MemberInfo に既定のメンバーがない場合は、Type 型の空の配列。
実装
例
次の例では、 の既定のメンバー情報 MyClass
を取得し、既定のメンバーを表示します。
using namespace System;
using namespace System::Reflection;
using namespace System::IO;
[DefaultMemberAttribute("Age")]
public ref class MyClass
{
public:
void Name( String^ s ){}
property int Age
{
int get()
{
return 20;
}
}
};
int main()
{
try
{
Type^ myType = MyClass::typeid;
array<MemberInfo^>^memberInfoArray = myType->GetDefaultMembers();
if ( memberInfoArray->Length > 0 )
{
System::Collections::IEnumerator^ myEnum = memberInfoArray->GetEnumerator();
while ( myEnum->MoveNext() )
{
MemberInfo^ memberInfoObj = safe_cast<MemberInfo^>(myEnum->Current);
Console::WriteLine( "The default member name is: {0}", memberInfoObj );
}
}
else
{
Console::WriteLine( "No default members are available." );
}
}
catch ( InvalidOperationException^ e )
{
Console::WriteLine( "InvalidOperationException: {0}", e->Message );
}
catch ( IOException^ e )
{
Console::WriteLine( "IOException: {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception: {0}", e->Message );
}
}
using System;
using System.Reflection;
using System.IO;
[DefaultMemberAttribute("Age")]
public class MyClass
{
public void Name(String s) {}
public int Age
{
get
{
return 20;
}
}
public static void Main()
{
try
{
Type myType = typeof(MyClass);
MemberInfo[] memberInfoArray = myType.GetDefaultMembers();
if (memberInfoArray.Length > 0)
{
foreach(MemberInfo memberInfoObj in memberInfoArray)
{
Console.WriteLine("The default member name is: " + memberInfoObj.ToString());
}
}
else
{
Console.WriteLine("No default members are available.");
}
}
catch(InvalidOperationException e)
{
Console.WriteLine("InvalidOperationException: " + e.Message);
}
catch(IOException e)
{
Console.WriteLine("IOException: " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
}
}
open System
open System.Reflection
open System.IO
[<DefaultMemberAttribute "Age">]
type MyClass() =
member _.Name(s: string) = ()
member _.Age
with get () =
20
try
let myType = typeof<MyClass>
let memberInfoArray = myType.GetDefaultMembers()
if memberInfoArray.Length > 0 then
for memberInfoObj in memberInfoArray do
printfn $"The default member name is: {memberInfoObj}"
else
printfn "No default members are available."
with
| :? InvalidOperationException as e ->
printfn $"InvalidOperationException: {e.Message}"
| :? IOException as e ->
printfn $"IOException: {e.Message}"
| e ->
printfn $"Exception: {e.Message}"
Imports System.Reflection
Imports System.IO
<DefaultMemberAttribute("Age")> Public Class [MyClass]
Public Sub Name(ByVal s As String)
End Sub
Public ReadOnly Property Age() As Integer
Get
Return 20
End Get
End Property
Public Shared Sub Main()
Try
Dim myType As Type = GetType([MyClass])
Dim memberInfoArray As MemberInfo() = myType.GetDefaultMembers()
If memberInfoArray.Length > 0 Then
Dim memberInfoObj As MemberInfo
For Each memberInfoObj In memberInfoArray
Console.WriteLine("The default member name is: " + memberInfoObj.ToString())
Next memberInfoObj
Else
Console.WriteLine("No default members are available.")
End If
Catch e As InvalidOperationException
Console.WriteLine("InvalidOperationException: " + e.Message)
Catch e As IOException
Console.WriteLine("IOException: " + e.Message)
Catch e As Exception
Console.WriteLine("Exception: " + e.Message)
End Try
End Sub
End Class
注釈
メソッドは GetDefaultMembers 、アルファベット順や宣言順序など、特定の順序でメンバーを返しません。 その順序は異なるため、コードはメンバーが返される順序に依存してはなりません。
このメソッドは、派生クラスによってオーバーライドできます。
メンバーには、プロパティ、メソッド、フィールド、イベントなどが含まれます。
次の表は、型に反映するときに メソッドによって Get
返される基底クラスのメンバーを示しています。
メンバーの型 | スタティック | 非静的 |
---|---|---|
コンストラクター | いいえ | いいえ |
フィールド | いいえ | はい。 フィールドは常に名前と署名で非表示になります。 |
event | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
メソッド | いいえ | はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。 |
入れ子になった型 | いいえ | いいえ |
プロパティ | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。
リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
カスタム属性は、共通型システムの一部ではありません。
現在 Type の が構築されたジェネリック型を表している場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 MemberInfo します。 たとえば、 クラスC<T>
に を返すT
プロパティP
がある場合、 で C<int>
を呼び出すとGetDefaultMembers、C# ( Visual Basic では )Property P As Integer
が返されますint P
。
現在 Type の がジェネリック型またはジェネリック メソッドの定義で型パラメーターを表している場合、このメソッドはクラス制約のメンバーを検索し、クラス制約がない場合は の Object メンバーを検索します。
適用対象
こちらもご覧ください
.NET