Type.GetDefaultMembers メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Typeが設定されている現在のDefaultMemberAttributeに対して定義されているメンバーを検索します。
public:
virtual cli::array <System::Reflection::MemberInfo ^> ^ GetDefaultMembers();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public virtual System.Reflection.MemberInfo[] GetDefaultMembers();
public virtual System.Reflection.MemberInfo[] GetDefaultMembers();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
override this.GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
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 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 メソッドによって返される基底クラスのメンバーを示しています。
| メンバーの種類 | Static | 非静的 |
|---|---|---|
| コンストラクター | いいえ | いいえ |
| フィールド | いいえ | Yes. フィールドは常に名前と署名によって非表示になります。 |
| イベント | 適用なし | 一般的な型システムルールは、継承がプロパティを実装するメソッドの継承と同じであるということです。 リフレクションは、プロパティを名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
| Method | いいえ | Yes. メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。 |
| 入れ子にされた型 | いいえ | いいえ |
| 財産 | 適用なし | 一般的な型システムルールは、継承がプロパティを実装するメソッドの継承と同じであるということです。 リフレクションは、プロパティを名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
名前と署名による隠蔽は、カスタム修飾子、戻り値の型、パラメーター型、センチネル、そしてアンマネージド呼び出し規則を含む、署名のすべての部分を考慮します。 これはバイナリ比較です。
リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
カスタム属性は、共通型システムの一部ではありません。
現在の Type が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つ MemberInfo オブジェクトを返します。 たとえば、クラス C<T> に P を返すプロパティ T がある場合、GetDefaultMembers で C<int> を呼び出すと、C# で int P が返されます (Visual Basic では Property P As Integer)。
現在の Type がジェネリック型またはジェネリック メソッドの定義で型パラメーターを表す場合、このメソッドはクラス制約のメンバー、またはクラス制約がない場合は Object のメンバーを検索します。