Type.GetProperties Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan properti dari .Type
Overload
| Nama | Deskripsi |
|---|---|
| GetProperties() |
Mengembalikan semua properti publik dari .Type |
| GetProperties(BindingFlags) |
Saat ditimpa di kelas turunan, cari properti saat ini Type, menggunakan batasan pengikatan yang ditentukan. |
GetProperties()
- Sumber:
- Type.cs
- Sumber:
- Type.cs
- Sumber:
- Type.cs
- Sumber:
- Type.cs
- Sumber:
- Type.cs
Mengembalikan semua properti publik dari .Type
public:
cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties();
public:
virtual cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo[] GetProperties();
public System.Reflection.PropertyInfo[] GetProperties();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperties : unit -> System.Reflection.PropertyInfo[]
member this.GetProperties : unit -> System.Reflection.PropertyInfo[]
abstract member GetProperties : unit -> System.Reflection.PropertyInfo[]
override this.GetProperties : unit -> System.Reflection.PropertyInfo[]
Public Function GetProperties () As PropertyInfo()
Mengembalikan
Array PropertyInfo objek yang mewakili semua properti publik dari .Type
-atau-
Array kosong jenis PropertyInfo, jika saat ini Type tidak memiliki properti publik.
Penerapan
- Atribut
Contoh
Contoh berikut menunjukkan penggunaan GetProperties metode .
PropertyInfo[] myPropertyInfo;
// Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties();
Console.WriteLine("Properties of System.Type are:");
for (int i = 0; i < myPropertyInfo.Length; i++)
{
Console.WriteLine(myPropertyInfo[i].ToString());
}
// Get the properties of 'Type' class object.
let myPropertyInfo = Type.GetType("System.Type").GetProperties()
printfn "Properties of System.Type are:"
for pi in myPropertyInfo do
printfn $"{pi}"
Dim myPropertyInfo() As PropertyInfo
' Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties()
Console.WriteLine("Properties of System.Type are:")
Dim i As Integer
For i = 0 To myPropertyInfo.Length - 1
Console.WriteLine(myPropertyInfo(i).ToString())
Next i
Keterangan
Memanggil kelebihan beban ini setara dengan memanggil kelebihan beban GetProperties(BindingFlags) dengan argumen bindingAttr sama dengan BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public di C# dan BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public di Visual Basic. Ini mengembalikan semua instans publik dan properti statis, baik yang didefinisikan oleh jenis yang diwakili oleh objek saat ini Type serta yang diwarisi dari jenis dasarnya.
Properti dianggap publik dalam refleksi jika memiliki setidaknya satu aksesor yang bersifat publik. Jika tidak, properti dianggap privat, dan Anda harus menggunakan BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (di Visual Basic, gabungkan nilai menggunakan Or) untuk mendapatkannya.
Dalam .NET 6 dan versi yang lebih lama, metode GetProperties tidak mengembalikan properti dalam urutan tertentu, seperti urutan alfabet atau deklarasi. Kode Anda tidak boleh bergantung pada urutan pengembalian properti, karena urutan tersebut bervariasi. Namun, dimulai dengan .NET 7, pemesanan bersifat deterministik berdasarkan urutan metadata dalam perakitan.
Tabel berikut menunjukkan anggota-anggota kelas dasar yang dikembalikan oleh metode-metode Get ketika mencerminkan tipe.
| Tipe Anggota | Static | Tidak Statis |
|---|---|---|
| Constructor | Tidak | Tidak |
| Ladang | Tidak | Yes. Bidang selalu disembunyikan berdasarkan nama dan tanda tangan. |
| Kejadian | Tidak teraplikasi | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
| Metode | Tidak | Yes. Metode (baik virtual maupun non-virtual) dapat disembunyikan berdasarkan nama atau berdasarkan nama dan tanda tangan. |
| Tipe Berlapis | Tidak | Tidak |
| Property | Tidak teraplikasi | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
Hide-by-name-and-signature mempertimbangkan semua komponen tanda tangan, termasuk modifikasi khusus, tipe pengembalian, tipe parameter, sentinel, dan konvensi pemanggilan yang tidak dikelola. Ini adalah perbandingan biner.
Untuk refleksi, sifat dan kejadian disembunyikan berdasarkan nama dan tanda tangan. Jika Anda memiliki properti dengan aksesor get dan set di kelas dasar, tetapi kelas turunan hanya memiliki aksesor get, properti kelas turunan menyembunyikan properti kelas dasar, dan Anda tidak akan dapat mengakses setter pada kelas dasar.
Atribut kustom bukan bagian dari sistem jenis umum.
Jika saat ini Type mewakili jenis generik yang dibangun, metode ini mengembalikan PropertyInfo objek dengan parameter jenis yang digantikan oleh argumen jenis yang sesuai.
Jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik, metode ini mencari properti batasan kelas.
Lihat juga
Berlaku untuk
GetProperties(BindingFlags)
- Sumber:
- Type.cs
- Sumber:
- Type.cs
- Sumber:
- Type.cs
- Sumber:
- Type.cs
- Sumber:
- Type.cs
Saat ditimpa di kelas turunan, cari properti saat ini Type, menggunakan batasan pengikatan yang ditentukan.
public:
abstract cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public abstract System.Reflection.PropertyInfo[] GetProperties(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.PropertyInfo[] GetProperties(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetProperties : System.Reflection.BindingFlags -> System.Reflection.PropertyInfo[]
abstract member GetProperties : System.Reflection.BindingFlags -> System.Reflection.PropertyInfo[]
Public MustOverride Function GetProperties (bindingAttr As BindingFlags) As PropertyInfo()
Parameter
- bindingAttr
- BindingFlags
Kombinasi bitwise dari nilai enumerasi yang menentukan bagaimana pencarian dilakukan.
-atau-
Default untuk mengembalikan array kosong.
Mengembalikan
Array objek yang mewakili semua properti saat ini Type yang cocok dengan batasan pengikatan yang ditentukan.
-atau-
Array kosong jenis PropertyInfo, jika saat ini Type tidak memiliki properti, atau jika tidak ada properti yang cocok dengan batasan pengikatan.
Penerapan
- Atribut
Contoh
Contoh berikut mendefinisikan kelas bernama PropertyClass yang mencakup enam properti: dua bersifat publik, satu bersifat privat, satu dilindungi, satu bersifat internal (Friend di Visual Basic), dan satu dilindungi internal (Protected Friend di Visual Basic). Kemudian menampilkan beberapa informasi properti dasar (nama dan jenis properti, apakah itu baca/tulis, dan visibilitasnya get dan set aksesor) untuk properti yang cocok dengan batasan pengikatan yang ditentukan.
using System;
using System.Reflection;
// Create a class having six properties.
public class PropertyClass
{
public String Property1
{
get { return "hello"; }
}
public String Property2
{
get { return "hello"; }
}
protected String Property3
{
get { return "hello"; }
}
private Int32 Property4
{
get { return 32; }
}
internal String Property5
{
get { return "value"; }
}
protected internal String Property6
{
get { return "value"; }
}
}
public class Example
{
public static void Main()
{
Type t = typeof(PropertyClass);
// Get the public properties.
PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public|BindingFlags.Instance);
Console.WriteLine("The number of public properties: {0}.\n",
propInfos.Length);
// Display the public properties.
DisplayPropertyInfo(propInfos);
// Get the nonpublic properties.
PropertyInfo[] propInfos1 = t.GetProperties(BindingFlags.NonPublic|BindingFlags.Instance);
Console.WriteLine("The number of non-public properties: {0}.\n",
propInfos1.Length);
// Display all the nonpublic properties.
DisplayPropertyInfo(propInfos1);
}
public static void DisplayPropertyInfo(PropertyInfo[] propInfos)
{
// Display information for all properties.
foreach (var propInfo in propInfos) {
bool readable = propInfo.CanRead;
bool writable = propInfo.CanWrite;
Console.WriteLine(" Property name: {0}", propInfo.Name);
Console.WriteLine(" Property type: {0}", propInfo.PropertyType);
Console.WriteLine(" Read-Write: {0}", readable & writable);
if (readable) {
MethodInfo getAccessor = propInfo.GetMethod;
Console.WriteLine(" Visibility: {0}",
GetVisibility(getAccessor));
}
if (writable) {
MethodInfo setAccessor = propInfo.SetMethod;
Console.WriteLine(" Visibility: {0}",
GetVisibility(setAccessor));
}
Console.WriteLine();
}
}
public static String GetVisibility(MethodInfo accessor)
{
if (accessor.IsPublic)
return "Public";
else if (accessor.IsPrivate)
return "Private";
else if (accessor.IsFamily)
return "Protected";
else if (accessor.IsAssembly)
return "Internal/Friend";
else
return "Protected Internal/Friend";
}
}
// The example displays the following output:
// The number of public properties: 2.
//
// Property name: Property1
// Property type: System.String
// Read-Write: False
// Visibility: Public
//
// Property name: Property2
// Property type: System.String
// Read-Write: False
// Visibility: Public
//
// The number of non-public properties: 4.
//
// Property name: Property3
// Property type: System.String
// Read-Write: False
// Visibility: Protected
//
// Property name: Property4
// Property type: System.Int32
// Read-Write: False
// Visibility: Private
//
// Property name: Property5
// Property type: System.String
// Read-Write: False
// Visibility: Internal/Friend
//
// Property name: Property6
// Property type: System.String
// Read-Write: False
// Visibility: Protected Internal/Friend
open System.Reflection
// Create a class having four properties.
type PropertyClass() =
member _.Property1 =
"hello"
member _.Property2 =
"hello"
member private _.Property3 =
32
member internal _.Property4 =
"value"
let getVisibility (accessor: MethodInfo) =
if accessor.IsPublic then
"Public"
elif accessor.IsPrivate then
"Private"
elif accessor.IsFamily then
"Protected"
elif accessor.IsAssembly then
"Internal/Friend"
else
"Protected Internal/Friend"
let displayPropertyInfo (propInfos: #seq<PropertyInfo>) =
// Display information for all properties.
for propInfo in propInfos do
let readable = propInfo.CanRead
let writable = propInfo.CanWrite
printfn $" Property name: {propInfo.Name}"
printfn $" Property type: {propInfo.PropertyType}"
printfn $" Read-Write: {readable && writable}"
if readable then
let getAccessor = propInfo.GetMethod
printfn $" Visibility: {getVisibility getAccessor}"
if writable then
let setAccessor = propInfo.SetMethod
printfn $" Visibility: {getVisibility setAccessor}"
printfn ""
let t = typeof<PropertyClass>
// Get the public properties.
let propInfos = t.GetProperties(BindingFlags.Public ||| BindingFlags.Instance)
printfn $"The number of public properties: {propInfos.Length}.\n"
// Display the public properties.
displayPropertyInfo propInfos
// Get the nonpublic properties.
let propInfos1 = t.GetProperties(BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"The number of non-public properties: {propInfos1.Length}.\n"
// Display all the nonpublic properties.
displayPropertyInfo propInfos1
// The example displays the following output:
// The number of public properties: 2.
//
// Property name: Property1
// Property type: System.String
// Read-Write: False
// Visibility: Public
//
// Property name: Property2
// Property type: System.String
// Read-Write: False
// Visibility: Public
//
// The number of non-public properties: 2.
//
// Property name: Property3
// Property type: System.Int32
// Read-Write: False
// Visibility: Private
//
// Property name: Property4
// Property type: System.String
// Read-Write: False
// Visibility: Internal/Friend
Imports System.Reflection
' Create a class having six properties.
Public Class PropertyClass
Public ReadOnly Property Property1() As String
Get
Return "hello"
End Get
End Property
Public ReadOnly Property Property2() As String
Get
Return "hello"
End Get
End Property
Protected ReadOnly Property Property3() As String
Get
Return "hello"
End Get
End Property
Private ReadOnly Property Property4 As Integer
Get
Return 32
End Get
End Property
Friend ReadOnly Property Property5 As String
Get
Return "value"
End Get
End Property
Protected Friend ReadOnly Property Property6 As String
Get
Return "value"
End Get
End Property
End Class
Public Module Example
Public Sub Main()
Dim t As Type = GetType(PropertyClass)
' Get the public properties.
Dim propInfos As PropertyInfo() = t.GetProperties(BindingFlags.Public Or BindingFlags.Instance)
Console.WriteLine("The number of public properties: {0}",
propInfos.Length)
Console.WriteLine()
' Display the public properties.
DisplayPropertyInfo(propInfos)
' Get the non-public properties.
Dim propInfos1 As PropertyInfo() = t.GetProperties(BindingFlags.NonPublic Or BindingFlags.Instance)
Console.WriteLine("The number of non-public properties: {0}",
propInfos1.Length)
Console.WriteLine()
' Display all the non-public properties.
DisplayPropertyInfo(propInfos1)
End Sub
Public Sub DisplayPropertyInfo(ByVal propInfos() As PropertyInfo)
' Display information for all properties.
For Each propInfo In propInfos
Dim readable As Boolean = propInfo.CanRead
Dim writable As Boolean = propInfo.CanWrite
Console.WriteLine(" Property name: {0}", propInfo.Name)
Console.WriteLine(" Property type: {0}", propInfo.PropertyType)
Console.WriteLine(" Read-Write: {0}", readable And writable)
If readable Then
Dim getAccessor As MethodInfo = propInfo.GetMethod
Console.WriteLine(" Visibility: {0}",
GetVisibility(getAccessor))
End If
If writable Then
Dim setAccessor As MethodInfo = propInfo.SetMethod
Console.WriteLine(" Visibility: {0}",
GetVisibility(setAccessor))
End If
Console.WriteLine()
Next
End Sub
Public Function GetVisibility(accessor As MethodInfo) As String
If accessor.IsPublic Then
Return "Public"
ElseIf accessor.IsPrivate Then
Return "Private"
Else If accessor.IsFamily Then
Return "Protected"
Else If accessor.IsAssembly Then
Return "Internal/Friend"
Else
Return "Protected Internal/Friend"
End If
End Function
End Module
' The example displays the following output:
' The number of public properties: 2
'
' Property name: Property1
' Property type: System.String
' Read-Write: False
' Visibility: Public
'
' Property name: Property2
' Property type: System.String
' Read-Write: False
' Visibility: Public
'
' The number of non-public properties: 4
'
' Property name: Property3
' Property type: System.String
' Read-Write: False
' Visibility: Protected
'
' Property name: Property4
' Property type: System.Int32
' Read-Write: False
' Visibility: Private
'
' Property name: Property5
' Property type: System.String
' Read-Write: False
' Visibility: Internal/Friend
'
' Property name: Property6
' Property type: System.String
' Read-Write: False
' Visibility: Protected Internal/Friend
Keterangan
GetProperties(BindingFlags) Agar kelebihan beban berhasil mengambil informasi properti, bindingAttr argumen harus menyertakan setidaknya satu dari BindingFlags.Instance dan BindingFlags.Static, bersama dengan setidaknya satu dari BindingFlags.NonPublic dan BindingFlags.Public.
Bendera filter berikut BindingFlags dapat digunakan untuk menentukan properti mana yang akan disertakan dalam pencarian:
Tentukan
BindingFlags.Instanceuntuk menyertakan metode instans.Tentukan
BindingFlags.Staticuntuk menyertakan metode statis.Tentukan
BindingFlags.Publicuntuk menyertakan properti publik dalam pencarian. Properti dianggap publik dalam refleksi jika memiliki setidaknya satu aksesor yang bersifat publik.Tentukan
BindingFlags.NonPublicuntuk menyertakan properti non-publik (yaitu, properti privat, internal, dan terlindungi) dalam pencarian. Hanya properti yang dilindungi dan internal pada kelas dasar yang dikembalikan; properti privat pada kelas dasar tidak dikembalikan.Tentukan
BindingFlags.FlattenHierarchyuntuk menyertakanpublicdanprotectedanggota statis dalam hierarki ke atas; anggota statis sepertiprivatedi kelas yang diwariskan tidak disertakan.Tentukan
BindingFlags.Defaultsaja untuk mengembalikan array kosong PropertyInfo .
Bendera pengubah berikut BindingFlags dapat digunakan untuk mengubah cara kerja pencarian:
-
BindingFlags.DeclaredOnlyuntuk mencari hanya properti yang dideklarasikan pada Type, bukan properti yang hanya diwariskan.
Lihat System.Reflection.BindingFlags untuk informasi lebih lanjut.
Dalam .NET 6 dan versi yang lebih lama, metode GetProperties tidak mengembalikan properti dalam urutan tertentu, seperti urutan alfabet atau deklarasi. Kode Anda tidak boleh bergantung pada urutan pengembalian properti, karena urutan tersebut bervariasi. Namun, dimulai dengan .NET 7, pemesanan bersifat deterministik berdasarkan urutan metadata dalam perakitan.
Jika saat ini Type mewakili jenis generik yang dibangun, metode ini mengembalikan PropertyInfo objek dengan parameter jenis yang digantikan oleh argumen jenis yang sesuai.
Jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik, metode ini mencari properti batasan kelas.
Lihat juga
- PropertyInfo
- BindingFlags
- DefaultBinder
- GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])