Type.GetDefaultMembers Метод
Определение
Выполняет поиск членов, определенных для текущего объекта Type, для которого задан атрибут DefaultMemberAttribute.Searches for the members defined for the current Type whose DefaultMemberAttribute is set.
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.An array of MemberInfo objects representing all default members of the current Type.
- или --or- Пустой массив типа MemberInfo, если у текущего типа Type нет членов по умолчанию.An empty array of type MemberInfo, if the current Type does not have default members.
Реализации
Примеры
Следующий пример получает сведения об элементе по умолчанию MyClass
и отображает элементы по умолчанию.The following example obtains the default member information of MyClass
and displays the default members.
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 не возвращает элементы в определенном порядке, например алфавит или порядок объявления.The GetDefaultMembers method does not return members in a particular order, such as alphabetical or declaration order. Код не должен зависеть от порядка, в котором возвращаются элементы, так как этот порядок меняется.Your code must not depend on the order in which members are returned, because that order varies.
Этот метод может быть переопределен производным классом.This method can be overridden by a derived class.
Элементы включают свойства, методы, поля, события и т. д.Members include properties, methods, fields, events, and so on.
В следующей таблице показаны элементы базового класса, возвращаемые методами Get
при отражении в типе.The following table shows what members of a base class are returned by the Get
methods when reflecting on a type.
Тип членаMember Type | СтатическиеStatic | Не статическийNon-Static |
---|---|---|
КонструкторConstructor | НетNo | НетNo |
ПолеField | НетNo | Да.Yes. Поле всегда скрывается по имени и сигнатуре.A field is always hide-by-name-and-signature. |
событиеEvent | НеприменимоNot applicable | Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below. |
МетодMethod | НетNo | Да.Yes. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature. |
Вложенный типNested Type | НетNo | НетNo |
Свойство.Property | НеприменимоNot applicable | Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below. |
При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах.Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. Это двоичное сравнение.This is a binary comparison.
Для отражения свойства и события скрываются по имени и сигнатуре.For reflection, properties and events are hide-by-name-and-signature. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.
Настраиваемые атрибуты не являются частью системы общих типов.Custom attributes are not part of the common type system.
Если текущий Type представляет сконструированный универсальный тип, этот метод возвращает объекты MemberInfo с параметрами типа, замененными соответствующими аргументами типа.If the current Type represents a constructed generic type, this method returns the MemberInfo objects with the type parameters replaced by the appropriate type arguments. Например, если класс C<T>
имеет свойство P
, которое возвращает T
, вызов GetDefaultMembers в C<int>
возвращает int P
в C# (Property P As Integer
в Visual Basic).For example, if class C<T>
has a property P
that returns T
, calling GetDefaultMembers on C<int>
returns int P
in C# (Property P As Integer
in Visual Basic).
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод ищет члены ограничения класса или члены Object, если ограничение класса отсутствует.If the current Type represents a type parameter in the definition of a generic type or generic method, this method searches the members of the class constraint, or the members of Object if there is no class constraint.