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