Type.GetDefaultMembers Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет поиск членов, определенных для текущего объекта 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);
}
}
}
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
методами при отражении в типе.
Тип члена | Статические | Не статический |
---|---|---|
Конструктор | Нет | Нет |
Поле | Нет | Да. Поле всегда скрывается по имени и сигнатуре. |
Событие | Неприменимо | Правило системы общих типов — это то же наследование, что и методы, реализующие свойство. Отражение рассматривает свойства как скрытые по имени и сигнатуре. См. Примечание 2 ниже. |
Метод | Нет | Да. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре. |
Вложенный тип | Нет | Нет |
Свойство. | Неприменимо | Правило системы общих типов — это то же наследование, что и методы, реализующие свойство. Отражение рассматривает свойства как скрытые по имени и сигнатуре. См. Примечание 2 ниже. |
При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.
Настраиваемые атрибуты не являются частью системы общих типов.
Если текущий объект Type представляет сконструированный универсальный тип, этот метод возвращает MemberInfo объекты с параметрами типа, замененными соответствующими аргументами типа. Например, если класс C<T>
имеет свойство P
, которое возвращает T
, вызов метода GetDefaultMembers On C<int>
Returns int P
в C# ( Property P As Integer
в Visual Basic).
Если Current Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск членов ограничения класса или членов, Object Если ограничение класса отсутствует.