Type.GetDefaultMembers メソッド
DefaultMemberAttribute が設定されている現在の Type に定義されているメンバを検索します。
Public Overridable Function GetDefaultMembers() As MemberInfo()
[C#]
public virtual MemberInfo[] GetDefaultMembers();
[C++]
public: virtual MemberInfo* GetDefaultMembers() [];
[JScript]
public function GetDefaultMembers() : MemberInfo[];
戻り値
現在の Type のすべての既定メンバを表す MemberInfo オブジェクトの配列。
または
現在の Type に既定のメンバがない場合は、 MemberInfo 型の空の配列。
解説
このメソッドは、派生クラスでオーバーライドできます。
メンバには、プロパティ、メソッド、フィールド、イベントなどがあります。
型に対するリフレクション時に Get メソッドによって返される基本クラスのメンバを次の表に示します。
メンバ型 | 静的 | 非静的 |
---|---|---|
コンストラクタ | いいえ | いいえ |
フィールド | いいえ | はい。フィールドは常に名前と署名によって隠ぺいされます。 |
イベント | 適用なし | 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。 |
メソッド | いいえ | はい。メソッド (仮想メソッドと非仮想メソッドの両方) は、名前によって隠蔽することもできますし、名前と署名によって隠蔽することもできます。 |
入れ子になった型 | いいえ | いいえ |
プロパティ | 適用なし | 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。 |
- 名前と署名による隠ぺいでは、カスタム修飾子、戻り値の型、パラメータの型、sentinel、およびアンマネージ呼び出し規約を含めて、署名のすべての部分が判断の対象となります。これはバイナリ比較です。
- リフレクションの場合、プロパティおよびイベントは名前と署名によって隠ぺいされています。基本クラスに get アクセサと set アクセサの両方を持つプロパティがあり、派生クラスには get アクセサしかない場合、派生クラスのプロパティにより基本クラスのプロパティが隠ぺいされ、基本クラスの set アクセサにはアクセスできません。
- カスタム属性は、共通の型システムの一部ではありません。
使用例
[Visual Basic, C#, C++] MyClass の既定のメンバの情報を取得し、既定のメンバを表示する例を次に示します。
Imports System
Imports System.Reflection
Imports System.IO
Imports Microsoft.VisualBasic
<DefaultMemberAttribute("Age")> Public Class [MyClass]
Public Sub Name(ByVal s As String)
End Sub 'Name
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 'Main
End Class '[MyClass]
[C#]
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);
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::IO;
[DefaultMemberAttribute(S"Age")]
public __gc class MyClass {
public:
void Name(String* s) {}
__property int get_Age() {
return 20;
}
};
int main() {
try {
Type* myType = __typeof(MyClass);
MemberInfo* memberInfoArray[] = myType->GetDefaultMembers();
if (memberInfoArray->Length > 0) {
System::Collections::IEnumerator* myEnum = memberInfoArray->GetEnumerator();
while (myEnum->MoveNext()) {
MemberInfo* memberInfoObj = __try_cast<MemberInfo*>(myEnum->Current);
Console::WriteLine(S"The default member name is: {0}", memberInfoObj);
}
} else {
Console::WriteLine(S"No default members are available.");
}
} catch (InvalidOperationException* e) {
Console::WriteLine(S"InvalidOperationException: {0}", e->Message);
} catch (IOException* e) {
Console::WriteLine(S"IOException: {0}", e->Message);
} catch (Exception* e) {
Console::WriteLine(S"Exception: {0}", e->Message);
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
参照
Type クラス | Type メンバ | System 名前空間 | MemberInfo | DefaultMemberAttribute | GetMember | GetMembers | FindMembers