Type.GetProperty Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Lekéri az aktuális Typetulajdonság egy adott tulajdonságát.
Túlterhelések
| Name | Description |
|---|---|
| GetProperty(String, Type, Type[]) |
Megkeresi a megadott nyilvános tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak. |
| GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) |
Megkeresi a megadott tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak és módosítóknak a megadott kötési megkötések használatával. |
| GetProperty(String, Type, Type[], ParameterModifier[]) |
Megkeresi a megadott nyilvános tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak és módosítóknak. |
| GetProperty(String, Type[]) |
Megkeresi a megadott nyilvános tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak. |
| GetProperty(String, Type) |
Megkeresi a megadott névvel és visszatérési típussal rendelkező nyilvános tulajdonságot. |
| GetProperty(String, BindingFlags) |
Megkeresi a megadott tulajdonságot a megadott kötési korlátozások használatával. |
| GetProperty(String) |
Megkeresi a megadott nevű nyilvános tulajdonságot. |
GetProperty(String, Type, Type[])
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Megkeresi a megadott nyilvános tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types);
public System.Reflection.PropertyInfo GetProperty(string name, Type returnType, Type[] types);
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type, types As Type()) As PropertyInfo
Paraméterek
- name
- String
A lekérni kívánt nyilvános tulajdonság nevét tartalmazó sztring.
- returnType
- Type
A tulajdonság visszatérési típusa.
- types
- Type[]
Az indexelt tulajdonság lekéréséhez szükséges paraméterek számát, sorrendjét és típusát képviselő objektumtömb Type .
-vagy-
A típus Type üres tömbje (azaz Type[] types = new Type[0]) egy nem indexelt tulajdonság lekéréséhez.
Válaszok
Egy olyan objektum, amely azt a nyilvános tulajdonságot jelöli, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak, ha találhatók; egyéb esetben. null
Megvalósítás
- Attribútumok
Kivételek
Egynél több tulajdonság található a megadott névvel és a megadott argumentumtípusoknak megfelelő tulajdonsággal.
types többdimenziós.
Ennek egyik eleme types a .null
Megjegyzések
A tulajdonság akkor tekinthető nyilvánosnak a reflexió szemszögéből, ha legalább egy nyilvános hozzáférővel rendelkezik. Ellenkező esetben a tulajdonság privátnak minősül, és a lekéréshez (a Visual Basicben az értékeket kombinálva) kell használniaBindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static.Or
A keresés name érzékeli a kis- és nagybetűk közötti különbséget. A keresés nyilvános statikus és nyilvános példánytulajdonságokra terjed ki.
Ha a jelenlegi Type egy létrehozott általános típust jelöl, ez a metódus a PropertyInfo-t adja vissza, ahol a típusparamétereket a megfelelő típusargumentumokkal helyettesítettük.
Ha az aktuális Type érték egy típusparamétert jelöl egy általános típus vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer tulajdonságait.
Lásd még
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
A következőre érvényes:
GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Megkeresi a megadott tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak és módosítóknak a megadott kötési megkötések használatával.
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.PropertyInfo GetProperty(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, Type returnType, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, bindingAttr As BindingFlags, binder As Binder, returnType As Type, types As Type(), modifiers As ParameterModifier()) As PropertyInfo
Paraméterek
- name
- String
A lekérni kívánt tulajdonság nevét tartalmazó sztring.
- bindingAttr
- BindingFlags
A számbavételi értékek bitenkénti kombinációja, amely meghatározza a keresés menetét.
-vagy-
Default visszatéréshez null.
- binder
- Binder
Olyan objektum, amely tulajdonságokat határoz meg, és engedélyezi a kötést, amely magában foglalhatja egy túlterhelt metódus kiválasztását, az argumentumtípusok kényszerítését és a tag meghívását a tükröződésen keresztül.
-vagy-
Nullhivatkozás (Nothing Visual Basic) a DefaultBinder használatához.
- returnType
- Type
A tulajdonság visszatérési típusa.
- types
- Type[]
Az indexelt tulajdonság lekéréséhez szükséges paraméterek számát, sorrendjét és típusát képviselő objektumtömb Type .
-vagy-
A típus Type üres tömbje (azaz Type[] types = new Type[0]) egy nem indexelt tulajdonság lekéréséhez.
- modifiers
- ParameterModifier[]
A tömb megfelelő eleméhez ParameterModifier társított attribútumokat képviselő objektumtömbtypes. Az alapértelmezett iratgyűjtő nem dolgozza fel ezt a paramétert.
Válaszok
A megadott követelményeknek megfelelő tulajdonságot képviselő objektum, ha megtalálható; egyéb esetben. null
Megvalósítás
- Attribútumok
Kivételek
Egynél több tulajdonság található a megadott névvel, és megfelel a megadott kötési korlátozásoknak.
types többdimenziós.
-vagy-
modifiers többdimenziós.
-vagy-
types és modifiers nem azonos hosszúságúak.
Ennek egyik eleme types a .null
Megjegyzések
Az alábbi útmutató az összes túlterhelésre vonatkozik:
- A tulajdonság akkor tekinthető nyilvánosnak a reflexió szemszögéből, ha legalább egy nyilvános hozzáférővel rendelkezik. Ellenkező esetben a tulajdonság privátnak minősül, és a lekéréshez (a Visual Basicben az értékeket kombinálva) kell használniaBindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static.
Or - Ha a jelenlegi Type egy létrehozott általános típust jelöl, ez a metódus a PropertyInfo-t adja vissza, ahol a típusparamétereket a megfelelő típusargumentumokkal helyettesítettük.
- Ha az aktuális Type érték egy típusparamétert jelöl egy általános típus vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer tulajdonságait.
GetProperty(String) módszer
A keresés name érzékeli a kis- és nagybetűk közötti különbséget. A keresés nyilvános statikus és nyilvános példánytulajdonságokra terjed ki.
Azok a helyzetek, amelyekben AmbiguousMatchException előfordul, a következők:
- A típus két indexelt tulajdonságot tartalmaz, amelyek neve azonos, de különböző számú paramétert tartalmaz. A kétértelműség feloldásához használja a GetProperty paramétertípusokat meghatározó metódus túlterhelését.
- A származtatott típus deklarál egy olyan tulajdonságot, amely elrejt egy azonos nevű öröklött tulajdonságot a
newmódosítóShadows(Visual Basic) használatával. A kétértelműség feloldásához használja a metódus túlterhelését GetProperty(String, BindingFlags), és adja hozzá a BindingFlags.DeclaredOnly jelzőt, hogy a keresés csak a nem öröklött tagokra korlátozódjon.
GetProperty(String, BindingFlags) módszer
A következő BindingFlags szűrőjelölőkkel határozhatja meg, hogy mely tulajdonságok szerepeljenek a keresésben:
- A visszatéréshez meg kell adnia vagy a
BindingFlags.Instancevagy aBindingFlags.Static. - Adja meg
BindingFlags.Public, hogy a keresésbe belefoglalja a nyilvános tulajdonságokat. - Adja meg
BindingFlags.NonPublic, hogy a keresésbe be legyenek foglalva a nem nyilvános tulajdonságok (azaz a privát, a belső és a védett tulajdonságok). - Adja meg a
BindingFlags.FlattenHierarchy-t, hogy a hierarchiába belefoglalja apublicésprotectedstatikus tagokat; az örökölt osztályokban lévőprivatestatikus tagok nem szerepelnek.
A keresés működésének módosításához az alábbi BindingFlags módosító jelzők használhatók:
-
BindingFlags.IgnoreCasea eset figyelmen kívül hagyásáhozname. -
BindingFlags.DeclaredOnlyúgy keresni, hogy csak a rajta deklarált tulajdonságokra összpontosítsunk Type, nem pedig az egyszerűen öröklött tulajdonságokra.
Azok a helyzetek, amelyekben AmbiguousMatchException előfordul, a következők:
- A típus két indexelt tulajdonságot tartalmaz, amelyek neve azonos, de különböző számú paramétert tartalmaz. A kétértelműség feloldásához használja a GetProperty paramétertípusokat meghatározó metódus túlterhelését.
- A származtatott típus deklarál egy olyan tulajdonságot, amely elrejt egy azonos nevű öröklött tulajdonságot a
newmódosító (ShadowsVisual Basic) használatával. A kétértelműség feloldásához a keresés nem öröklődő tagokra való korlátozását is magában foglalja BindingFlags.DeclaredOnly .
GetProperty(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Type, System.Type[], System.Reflection.ParameterModifier[]) metódus
Bár az alapértelmezett kötő nem dolgozza fel a ParameterModifier (a modifiers paramétert), az absztrakt System.Reflection.Binder osztály használatával írhat egy egyedi kötőt, amely feldolgozza a modifiers.
ParameterModifier csak com-interop-on keresztüli híváskor használatos, és csak a hivatkozás által átadott paramétereket kezeli a rendszer.
Az alábbi táblázat azt mutatja be, hogy egy alaposztály mely tagjait adják vissza a metódusok egy Get típuson való tükrözéskor.
| Tagtípus | Static | Nem statikus |
|---|---|---|
| Constructor | No | No |
| Field | No | Yes. A mezők mindig név és aláírás alapján rejthetők el. |
| Event | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A reflection a tulajdonságokat név és aláírás szerinti elrejtésként kezeli. 2 |
| Módszer | No | Yes. A metódusok (mind a virtuális, mind a nem virtuális) elrejthetők név szerint vagy elrejthetők név és aláírás alapján. |
| Beágyazott típus | No | No |
| Property | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A reflection a tulajdonságokat név és aláírás szerinti elrejtésként kezeli. 2 |
Notes:
- A név és aláírás szerinti elrejtés az aláírás összes részét figyelembe veszi, beleértve az egyéni módosítókat, a visszatérési típusokat, a paramétertípusokat, a sentineleket és a nem kezelt hívási konvenciókat. Ez egy bináris összehasonlítás.
- A reflexió során a tulajdonságok és események név és szignatúra szerint vannak elrejtve. Ha az alaposztálynak van egy beolvasási és egy beállítási kiegészítővel rendelkező tulajdonsága, de a származtatott osztálynak csak beolvasási kiegészítője van, a származtatott osztály tulajdonsága elrejti az alaposztály tulajdonságát, és nem tudja majd elérni a beállítót az alaposztályban.
- Az egyéni attribútumok nem részei a gyakori típusrendszernek.
A következő BindingFlags szűrőjelölőkkel határozhatja meg, hogy mely tulajdonságok szerepeljenek a keresésben:
- A visszatéréshez meg kell adnia vagy a
BindingFlags.Instancevagy aBindingFlags.Static. - Adja meg
BindingFlags.Public, hogy a keresésbe belefoglalja a nyilvános tulajdonságokat. - Adja meg
BindingFlags.NonPublic, hogy a keresésbe be legyenek foglalva a nem nyilvános tulajdonságok (azaz a privát, a belső és a védett tulajdonságok). - Adja meg a
BindingFlags.FlattenHierarchy-t, hogy a hierarchiába belefoglalja apublicésprotectedstatikus tagokat; az örökölt osztályokban lévőprivatestatikus tagok nem szerepelnek.
A keresés működésének módosításához az alábbi BindingFlags módosító jelzők használhatók:
-
BindingFlags.IgnoreCasea eset figyelmen kívül hagyásáhozname. -
BindingFlags.DeclaredOnlyúgy keresni, hogy csak a rajta deklarált tulajdonságokra összpontosítsunk Type, nem pedig az egyszerűen öröklött tulajdonságokra.
Indexelők és alapértelmezett tulajdonságok
A Visual Basic, a C# és a C++ egyszerűsített szintaxissal rendelkezik az indexelt tulajdonságok eléréséhez, és lehetővé teszi, hogy egy indexelt tulajdonság legyen az alapértelmezett típus. Ha például a változó myList egyre ArrayListhivatkozik, akkor a szintaxis myList[3] (myList(3) a Visual Basicben) a 3 indexet tartalmazó elemet kéri le. Túlterhelheti a tulajdonságot.
A C#-ban ezt a funkciót indexelőnek nevezik, és név szerint nem lehet rá hivatkozni. Alapértelmezés szerint a C#-indexelő a metaadatokban egy indexelt tulajdonságként Itemjelenik meg. Az osztálykódtár fejlesztője azonban az IndexerNameAttribute attribútummal módosíthatja az indexelő nevét a metaadatokban. Az String osztálynak például van egy indexelője Chars[]. A C# nyelven kívül más nyelvekkel létrehozott indexelt tulajdonságoknak más nevei is lehetnek.
Annak megállapításához, hogy egy típus rendelkezik-e alapértelmezett tulajdonságmal, használja a GetCustomAttributes(Type, Boolean) metódust az DefaultMemberAttribute attribútum teszteléséhez. Ha a típus az DefaultMemberAttribute, a tulajdonság az MemberName alapértelmezett tulajdonság nevét adja vissza.
Lásd még
- PropertyInfo
- String
- BindingFlags
- Binder
- DefaultBinder
- ParameterModifier
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
A következőre érvényes:
GetProperty(String, Type, Type[], ParameterModifier[])
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Megkeresi a megadott nyilvános tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak és módosítóknak.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.PropertyInfo GetProperty(string name, Type returnType, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type, types As Type(), modifiers As ParameterModifier()) As PropertyInfo
Paraméterek
- name
- String
A lekérni kívánt nyilvános tulajdonság nevét tartalmazó sztring.
- returnType
- Type
A tulajdonság visszatérési típusa.
- types
- Type[]
Az indexelt tulajdonság lekéréséhez szükséges paraméterek számát, sorrendjét és típusát képviselő objektumtömb Type .
-vagy-
A típus Type üres tömbje (azaz Type[] types = new Type[0]) egy nem indexelt tulajdonság lekéréséhez.
- modifiers
- ParameterModifier[]
A tömb megfelelő eleméhez ParameterModifier társított attribútumokat képviselő objektumtömbtypes. Az alapértelmezett iratgyűjtő nem dolgozza fel ezt a paramétert.
Válaszok
A megadott követelményeknek megfelelő nyilvános tulajdonságot képviselő objektum, ha megtalálható; egyéb esetben. null
Megvalósítás
- Attribútumok
Kivételek
Egynél több tulajdonság található a megadott névvel, és megfelel a megadott argumentumtípusoknak és módosítóknak.
types többdimenziós.
-vagy-
modifiers többdimenziós.
-vagy-
types és modifiers nem azonos hosszúságúak.
Ennek egyik eleme types a .null
Példák
Az alábbi példa egy Type , az osztálynak megfelelő MyPropertyClassobjektumot szerez be, és az osztály indexelt tulajdonsága a metódusnak átadott argumentumok használatával lesz lekérve GetProperty .
using System;
using System.Reflection;
public class MyPropertyClass
{
private readonly int [,] _myPropertyArray = new int[10,10];
// Declare an indexer.
public int this [int i,int j]
{
get
{
return _myPropertyArray[i,j];
}
set
{
_myPropertyArray[i,j] = value;
}
}
}
public class MyTypeClass
{
public static void Main()
{
try
{
Type myType=typeof(MyPropertyClass);
Type[] myTypeArray = new Type[2];
// Create an instance of the Type array representing the number, order
// and type of the parameters for the property.
myTypeArray.SetValue(typeof(int),0);
myTypeArray.SetValue(typeof(int),1);
// Search for the indexed property whose parameters match the
// specified argument types and modifiers.
PropertyInfo myPropertyInfo = myType.GetProperty("Item",
typeof(int),myTypeArray,null);
Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name +
" has a property type of " + myPropertyInfo.PropertyType);
}
catch(Exception ex)
{
Console.WriteLine("An exception occurred " + ex.Message);
}
}
}
open System
type MyPropertyClass() =
let myPropertyArray = Array2D.zeroCreate<int> 10 10
// Declare an indexed property.
member _.Item
with get (i, j) =
myPropertyArray[i, j]
and set (i, j) value =
myPropertyArray[i, j] <- value
try
let myType = typeof<MyPropertyClass>
let myTypeArray = Array.zeroCreate<Type> 2
// Create an instance of the Type array representing the number, order
// and type of the parameters for the property.
myTypeArray.SetValue(typeof<int>, 0)
myTypeArray.SetValue(typeof<int>, 1)
// Search for the indexed property whose parameters match the
// specified argument types and modifiers.
let myPropertyInfo = myType.GetProperty("Item", typeof<int>, myTypeArray, null)
printfn $"{myType.FullName}.{myPropertyInfo.Name} has a property type of {myPropertyInfo.PropertyType}"
with ex ->
printfn $"An exception occurred {ex.Message}"
Imports System.Reflection
Public Class MyPropertyClass
Private myPropertyArray(9, 9) As Integer
' Declare an indexer.
Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
Get
Return myPropertyArray(i, j)
End Get
Set(ByVal Value As Integer)
myPropertyArray(i, j) = Value
End Set
End Property
End Class
Public Class MyTypeClass21
Public Shared Sub Run()
Try
Dim myType As Type = GetType(MyPropertyClass)
Dim myTypeArray(1) As Type
' Create an instance of a Type array representing the number, order
' and type of the parameters for the property.
myTypeArray.SetValue(GetType(Integer), 0)
myTypeArray.SetValue(GetType(Integer), 1)
' Search for the indexed property whose parameters match the
' specified argument types and modifiers.
Dim myPropertyInfo As PropertyInfo = myType.GetProperty("Item",
GetType(Integer), myTypeArray, Nothing)
Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name +
" has a property type of " + myPropertyInfo.PropertyType.ToString())
Catch ex As Exception
Console.WriteLine("An exception occurred " + ex.Message.ToString())
End Try
End Sub
End Class
Megjegyzések
A tulajdonság akkor tekinthető nyilvánosnak a reflexió szemszögéből, ha legalább egy nyilvános hozzáférővel rendelkezik. Ellenkező esetben a tulajdonság privátnak minősül, és a lekéréshez (a Visual Basicben az értékeket kombinálva) kell használniaBindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static.Or
Bár az alapértelmezett kötő nem dolgozza fel a ParameterModifier (a modifiers paramétert), az absztrakt System.Reflection.Binder osztály használatával írhat egy egyedi kötőt, amely feldolgozza a modifiers.
ParameterModifier csak com-interop-on keresztüli híváskor használatos, és csak a hivatkozás által átadott paramétereket kezeli a rendszer.
A keresés name érzékeli a kis- és nagybetűk közötti különbséget. A keresés nyilvános statikus és nyilvános példánytulajdonságokra terjed ki.
Ha a jelenlegi Type egy létrehozott általános típust jelöl, ez a metódus a PropertyInfo-t adja vissza, ahol a típusparamétereket a megfelelő típusargumentumokkal helyettesítettük.
Ha az aktuális Type érték egy típusparamétert jelöl egy általános típus vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer tulajdonságait.
Lásd még
- PropertyInfo
- String
- DefaultBinder
- ParameterModifier
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
A következőre érvényes:
GetProperty(String, Type[])
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Megkeresi a megadott nyilvános tulajdonságot, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, cli::array <Type ^> ^ types);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type[] types);
public System.Reflection.PropertyInfo GetProperty(string name, Type[] types);
public System.Reflection.PropertyInfo? GetProperty(string name, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, types As Type()) As PropertyInfo
Paraméterek
- name
- String
A lekérni kívánt nyilvános tulajdonság nevét tartalmazó sztring.
- types
- Type[]
Az indexelt tulajdonság lekéréséhez szükséges paraméterek számát, sorrendjét és típusát képviselő objektumtömb Type .
-vagy-
A típus Type üres tömbje (azaz Type[] types = new Type[0]) egy nem indexelt tulajdonság lekéréséhez.
Válaszok
Egy olyan objektum, amely azt a nyilvános tulajdonságot jelöli, amelynek paraméterei megfelelnek a megadott argumentumtípusoknak, ha találhatók; egyéb esetben. null
Megvalósítás
- Attribútumok
Kivételek
Egynél több tulajdonság található a megadott névvel és a megadott argumentumtípusoknak megfelelő tulajdonsággal.
types többdimenziós.
Ennek egyik eleme types a .null
Példák
Az alábbi példa lekéri egy Type felhasználó által definiált osztály objektumát, lekéri az osztály tulajdonságát, és megjeleníti a tulajdonság tulajdonságnevét és típusát a megadott GetPropertyargumentumok szerint.
using System;
using System.Reflection;
class MyClass3
{
private readonly int[,] _myArray = { { 1, 2 }, { 3, 4 } };
// Declare an indexer.
public int this[int i, int j]
{
get
{
return _myArray[i, j];
}
set
{
_myArray[i, j] = value;
}
}
}
public class MyTypeClass3
{
public static void Main(string[] args)
{
try
{
// Get the Type object.
Type myType = typeof(MyClass3);
Type[] myTypeArr = new Type[2];
// Create an instance of a Type array.
myTypeArr.SetValue(typeof(int), 0);
myTypeArr.SetValue(typeof(int), 1);
// Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
PropertyInfo myPropInfo = myType.GetProperty("Item", myTypeArr);
// Display the property.
Console.WriteLine("The {0} property exists in MyClass3.",
myPropInfo.ToString());
}
catch (NullReferenceException e)
{
Console.WriteLine("An exception occurred.");
Console.WriteLine("Source : {0}", e.Source);
Console.WriteLine("Message : {0}", e.Message);
}
}
}
open System
type MyClass1() =
let myArray = array2D [[1; 2]; [3; 4]]
// Declare an indexed property.
member _.Item
with get (i, j) =
myArray[i, j]
and set (i, j) value =
myArray[i, j] <- value
try
// Get the Type object.
let myType = typeof<MyClass1>
let myTypeArr = Array.zeroCreate<Type> 2
// Create an instance of a Type array.
myTypeArr.SetValue(typeof<int>, 0)
myTypeArr.SetValue(typeof<int>, 1)
// Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
let myPropInfo = myType.GetProperty("Item", myTypeArr)
// Display the property.
printfn $"The {myPropInfo} property exists in MyClass1."
with :? NullReferenceException as e ->
printfn "An exception occurred."
printfn $"Source : {e.Source}"
printfn $"Message : {e.Message}"
Imports System.Reflection
Module Module3
Class MyClass3
Private myArray As Integer(,) = {{1, 2}, {3, 4}}
' Declare an indexer.
Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
Get
Return myArray(i, j)
End Get
Set(ByVal Value As Integer)
myArray(i, j) = Value
End Set
End Property
End Class
Public Class MyTypeClass3
Public Shared Sub Run()
Try
' Get the Type Object.
Dim myType As Type = GetType(MyClass3)
Dim myTypeArr(1) As Type
' Create an instance of a Type array.
myTypeArr.SetValue(GetType(Integer), 0)
myTypeArr.SetValue(GetType(Integer), 1)
' Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
Dim myPropInfo As PropertyInfo = myType.GetProperty("Item", myTypeArr)
' Display the property.
Console.WriteLine("The {0} property exists in MyClass3.", myPropInfo.ToString())
Catch e As NullReferenceException
Console.WriteLine("An exception occurred.")
Console.WriteLine("Source : {0}", e.Source.ToString())
Console.WriteLine("Message : {0}", e.Message.ToString())
End Try
End Sub
End Class
End Module 'Module3
Megjegyzések
A tulajdonság akkor tekinthető nyilvánosnak a reflexió szemszögéből, ha legalább egy nyilvános hozzáférővel rendelkezik. Ellenkező esetben a tulajdonság privátnak minősül, és a lekéréshez (a Visual Basicben az értékeket kombinálva) kell használniaBindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static.Or
A keresés name érzékeli a kis- és nagybetűk közötti különbséget. A keresés nyilvános statikus és nyilvános példánytulajdonságokra terjed ki.
Ha a jelenlegi Type egy létrehozott általános típust jelöl, ez a metódus a PropertyInfo-t adja vissza, ahol a típusparamétereket a megfelelő típusargumentumokkal helyettesítettük.
Ha az aktuális Type érték egy típusparamétert jelöl egy általános típus vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer tulajdonságait.
Lásd még
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
A következőre érvényes:
GetProperty(String, Type)
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Megkeresi a megadott névvel és visszatérési típussal rendelkező nyilvános tulajdonságot.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType);
public System.Reflection.PropertyInfo GetProperty(string name, Type returnType);
public System.Reflection.PropertyInfo? GetProperty(string name, Type? returnType);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string * Type -> System.Reflection.PropertyInfo
member this.GetProperty : string * Type -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type) As PropertyInfo
Paraméterek
- name
- String
A lekérni kívánt nyilvános tulajdonság nevét tartalmazó sztring.
- returnType
- Type
A tulajdonság visszatérési típusa.
Válaszok
A megadott névvel rendelkező nyilvános tulajdonságot képviselő objektum, ha megtalálható; egyéb esetben. null
Megvalósítás
- Attribútumok
Kivételek
Egynél több tulajdonság található a megadott névvel.
name az null, vagy returnType az null.
Példák
Az alábbi példa egy egy tulajdonsággal rendelkező osztályt határoz meg, és lekéri a tulajdonság nevét és típusát.
using System;
using System.Reflection;
class MyPropertyTypeClass
{
public string MyProperty1 { get; set; } = "Hello World.";
}
class TestClass
{
static void Main()
{
try
{
Type myType = typeof(MyPropertyTypeClass);
// Get the PropertyInfo object representing MyProperty1.
PropertyInfo myStringProperties1 = myType.GetProperty("MyProperty1", typeof(string));
Console.WriteLine("The name of the first property of MyPropertyTypeClass is {0}.",
myStringProperties1.Name);
Console.WriteLine("The type of the first property of MyPropertyTypeClass is {0}.",
myStringProperties1.PropertyType);
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException :" + e.Message);
}
catch (AmbiguousMatchException e)
{
Console.WriteLine("AmbiguousMatchException :" + e.Message);
}
catch (NullReferenceException e)
{
Console.WriteLine("Source : {0}", e.Source);
Console.WriteLine("Message : {0}", e.Message);
}
//Output:
//The name of the first property of MyPropertyTypeClass is MyProperty1.
//The type of the first property of MyPropertyTypeClass is System.String.
}
}
open System
open System.Reflection
type MyClass1() =
let mutable myMessage = "Hello World."
member _.MyProperty1
with get () =
myMessage
and set (value) =
myMessage <- value
try
let myType = typeof<MyClass1>
// Get the PropertyInfo object representing MyProperty1.
let myStringProperties1 = myType.GetProperty("MyProperty1", typeof<string>)
printfn $"The name of the first property of MyClass1 is {myStringProperties1.Name}."
printfn $"The type of the first property of MyClass1 is {myStringProperties1.PropertyType}."
with
| :? ArgumentNullException as e ->
printfn $"ArgumentNullException :{e.Message}"
| :? AmbiguousMatchException as e ->
printfn $"AmbiguousMatchException :{e.Message}"
| :? NullReferenceException as e ->
printfn $"Source : {e.Source}"
printfn $"Message : {e.Message}"
// Output:
// The name of the first property of MyClass1 is MyProperty1.
// The type of the first property of MyClass1 is System.String.
Imports System.Reflection
Class MyTypesClass
Private myMessage As [String] = "Hello World."
Public Property MyProperty1() As String
Get
Return myMessage
End Get
Set(ByVal Value As String)
myMessage = Value
End Set
End Property
End Class
Class TestClass
Shared Sub Run()
Try
Dim myType As Type = GetType(MyTypesClass)
' Get the PropertyInfo object representing MyProperty1.
Dim myStringProperties1 As PropertyInfo = myType.GetProperty("MyProperty1", GetType(String))
Console.WriteLine("The name of the first property of MyTypesClass is {0}.", myStringProperties1.Name)
Console.WriteLine("The type of the first property of MyTypesClass is {0}.", myStringProperties1.PropertyType.ToString())
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException :" + e.Message.ToString())
Catch e As AmbiguousMatchException
Console.WriteLine("AmbiguousMatchException :" + e.Message.ToString())
Catch e As NullReferenceException
Console.WriteLine("Source : {0}", e.Source.ToString())
Console.WriteLine("Message : {0}", e.Message.ToString())
End Try
'Output:
'The name of the first property of MyTypesClass is MyProperty1.
'The type of the first property of MyTypesClass is System.String.
End Sub
End Class
Megjegyzések
A tulajdonság akkor tekinthető nyilvánosnak a reflexió szemszögéből, ha legalább egy nyilvános hozzáférővel rendelkezik. Ellenkező esetben a tulajdonság privátnak minősül, és a lekéréshez (a Visual Basicben az értékeket kombinálva) kell használniaBindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static.Or
A keresés name érzékeli a kis- és nagybetűk közötti különbséget. A keresés nyilvános statikus és nyilvános példánytulajdonságokra terjed ki.
Ha a jelenlegi Type egy létrehozott általános típust jelöl, ez a metódus a PropertyInfo-t adja vissza, ahol a típusparamétereket a megfelelő típusargumentumokkal helyettesítettük.
Ha az aktuális Type érték egy típusparamétert jelöl egy általános típus vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer tulajdonságait.
Lásd még
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
A következőre érvényes:
GetProperty(String, BindingFlags)
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Megkeresi a megadott tulajdonságot a megadott kötési korlátozások használatával.
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr);
public System.Reflection.PropertyInfo GetProperty(string name, System.Reflection.BindingFlags bindingAttr);
public System.Reflection.PropertyInfo? GetProperty(string name, System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
abstract member GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, bindingAttr As BindingFlags) As PropertyInfo
Paraméterek
- name
- String
A lekérni kívánt tulajdonság nevét tartalmazó sztring.
- bindingAttr
- BindingFlags
A számbavételi értékek bitenkénti kombinációja, amely meghatározza a keresés menetét.
-vagy-
Default visszatéréshez null.
Válaszok
A megadott követelményeknek megfelelő tulajdonságot képviselő objektum, ha megtalálható; egyéb esetben. null
Megvalósítás
- Attribútumok
Kivételek
Egynél több tulajdonság található a megadott névvel, és megfelel a megadott kötési korlátozásoknak.
name az null.
Példák
Az alábbi példa lekéri a felhasználó által definiált osztály típusát, lekéri az osztály egy tulajdonságát, és a megadott kötési korlátozásoknak megfelelően megjeleníti a tulajdonság nevét.
using System;
using System.Reflection;
class MyClass2
{
// Declare MyProperty.
public int MyProperty { get; set; }
}
public class MyTypeClass2
{
public static void Main(string[] args)
{
try
{
// Get Type object of MyClass2.
Type myType = typeof(MyClass2);
// Get the PropertyInfo by passing the property name and specifying the BindingFlags.
PropertyInfo myPropInfo = myType.GetProperty(
"MyProperty",
BindingFlags.Public | BindingFlags.Instance
);
// Display Name property to console.
Console.WriteLine("{0} is a property of MyClass2.", myPropInfo.Name);
}
catch (NullReferenceException e)
{
Console.WriteLine("MyProperty does not exist in MyClass2." + e.Message);
}
}
}
open System
open System.Reflection
type MyClass() =
let mutable myProperty = 0
// Declare MyProperty.
member _.MyProperty
with get () =
myProperty
and set (value) =
myProperty <- value
try
// Get Type object of MyClass.
let myType = typeof<MyClass>
// Get the PropertyInfo by passing the property name and specifying the BindingFlags.
let myPropInfo = myType.GetProperty("MyProperty", BindingFlags.Public ||| BindingFlags.Instance)
// Display Name property to console.
printfn $"{myPropInfo.Name} is a property of MyClass."
with :? NullReferenceException as e ->
printfn $"MyProperty does not exist in MyClass.{e.Message}"
Imports System.Reflection
Module Module1
Public Class MyClass1
Private myProperty1 As Integer
Public Property MyProperty() As Integer
Get
Return myProperty1
End Get
Set(ByVal Value As Integer)
myProperty1 = Value
End Set
End Property
Public Shared Sub Run()
Try
' Get a Type object corresponding to MyClass.
Dim myType As Type = GetType(MyClass1)
' Get a PropertyInfo object by passing property name and specifying BindingFlags.
Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty", BindingFlags.Public Or BindingFlags.Instance)
' Display the Name property.
Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name)
Catch e As NullReferenceException
Console.WriteLine("MyProperty does not exist in MyClass.", e.Message.ToString())
End Try
End Sub
End Class
End Module 'Module1
Lásd még
- PropertyInfo
- String
- BindingFlags
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)
A következőre érvényes:
GetProperty(String)
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Megkeresi a megadott nevű nyilvános tulajdonságot.
public:
System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name);
public:
virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.PropertyInfo? GetProperty(string name);
public System.Reflection.PropertyInfo GetProperty(string name);
public System.Reflection.PropertyInfo? GetProperty(string name);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetProperty : string -> System.Reflection.PropertyInfo
member this.GetProperty : string -> System.Reflection.PropertyInfo
abstract member GetProperty : string -> System.Reflection.PropertyInfo
override this.GetProperty : string -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String) As PropertyInfo
Paraméterek
- name
- String
A lekérni kívánt nyilvános tulajdonság nevét tartalmazó sztring.
Válaszok
A megadott névvel rendelkező nyilvános tulajdonságot képviselő objektum, ha megtalálható; egyéb esetben. null
Megvalósítás
- Attribútumok
Kivételek
Egynél több tulajdonság található a megadott névvel.
name az null.
Példák
Az alábbi példa lekéri egy Type felhasználó által definiált osztály objektumát, lekéri az osztály egy tulajdonságát, és megjeleníti a tulajdonság nevét.
using System;
using System.Reflection;
class MyClass1
{
// Declare MyProperty.
public int MyProperty { get; set; }
}
public class MyTypeClass1
{
public static void Main(string[] args)
{
try
{
// Get the Type object corresponding to MyClass1.
Type myType = typeof(MyClass1);
// Get the PropertyInfo object by passing the property name.
PropertyInfo myPropInfo = myType.GetProperty("MyProperty");
// Display the property name.
Console.WriteLine("The {0} property exists in MyClass1.", myPropInfo.Name);
}
catch (NullReferenceException e)
{
Console.WriteLine("The property does not exist in MyClass1." + e.Message);
}
}
}
open System
type MyClass() =
let mutable myProperty = 0
// Declare MyProperty.
member _.MyProperty
with get () =
myProperty
and set (value) =
myProperty <- value
try
// Get the Type object corresponding to MyClass.
let myType = typeof<MyClass>
// Get the PropertyInfo object by passing the property name.
let myPropInfo = myType.GetProperty "MyProperty"
// Display the property name.
printfn $"The {myPropInfo.Name} property exists in MyClass."
with :? NullReferenceException as e ->
printfn $"The property does not exist in MyClass.{e.Message}"
Imports System.Reflection
Class MyClass1
Private myProperty1 As Integer
' Declare MyProperty.
Public Property MyProperty() As Integer
Get
Return MyProperty1
End Get
Set(ByVal Value As Integer)
MyProperty1 = Value
End Set
End Property
End Class
Public Class MyTypeClass
Public Shared Sub Run(ByVal args() As String)
Try
' Get Type Object corresponding to MyClass.
Dim myType As Type = GetType(MyClass1)
' Get PropertyInfo object by passing property name.
Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty")
' Display Name property to console.
Console.WriteLine("The {0} property exists in MyClass.", myPropInfo.Name)
Catch e As NullReferenceException
Console.WriteLine("The property does not exist in MyClass.", e.Message.ToString())
End Try
End Sub
End Class
Megjegyzések
Az alábbi útmutató az összes túlterhelésre vonatkozik:
- A tulajdonság akkor tekinthető nyilvánosnak a reflexió szemszögéből, ha legalább egy nyilvános hozzáférővel rendelkezik. Ellenkező esetben a tulajdonság privátnak minősül, és a lekéréshez (a Visual Basicben az értékeket kombinálva) kell használniaBindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static.
Or - Ha a jelenlegi Type egy létrehozott általános típust jelöl, ez a metódus a PropertyInfo-t adja vissza, ahol a típusparamétereket a megfelelő típusargumentumokkal helyettesítettük.
- Ha az aktuális Type érték egy típusparamétert jelöl egy általános típus vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer tulajdonságait.
GetProperty(String) módszer
A keresés name érzékeli a kis- és nagybetűk közötti különbséget. A keresés nyilvános statikus és nyilvános példánytulajdonságokra terjed ki.
Azok a helyzetek, amelyekben AmbiguousMatchException előfordul, a következők:
- A típus két indexelt tulajdonságot tartalmaz, amelyek neve azonos, de különböző számú paramétert tartalmaz. A kétértelműség feloldásához használja a GetProperty paramétertípusokat meghatározó metódus túlterhelését.
- A származtatott típus deklarál egy olyan tulajdonságot, amely elrejt egy azonos nevű öröklött tulajdonságot a
newmódosítóShadows(Visual Basic) használatával. A kétértelműség feloldásához használja a metódus túlterhelését GetProperty(String, BindingFlags), és adja hozzá a BindingFlags.DeclaredOnly jelzőt, hogy a keresés csak a nem öröklött tagokra korlátozódjon.
GetProperty(String, BindingFlags) módszer
A következő BindingFlags szűrőjelölőkkel határozhatja meg, hogy mely tulajdonságok szerepeljenek a keresésben:
- A visszatéréshez meg kell adnia vagy a
BindingFlags.Instancevagy aBindingFlags.Static. - Adja meg
BindingFlags.Public, hogy a keresésbe belefoglalja a nyilvános tulajdonságokat. - Adja meg
BindingFlags.NonPublic, hogy a keresésbe be legyenek foglalva a nem nyilvános tulajdonságok (azaz a privát, a belső és a védett tulajdonságok). - Adja meg a
BindingFlags.FlattenHierarchy-t, hogy a hierarchiába belefoglalja apublicésprotectedstatikus tagokat; az örökölt osztályokban lévőprivatestatikus tagok nem szerepelnek.
A keresés működésének módosításához az alábbi BindingFlags módosító jelzők használhatók:
-
BindingFlags.IgnoreCasea eset figyelmen kívül hagyásáhozname. -
BindingFlags.DeclaredOnlyúgy keresni, hogy csak a rajta deklarált tulajdonságokra összpontosítsunk Type, nem pedig az egyszerűen öröklött tulajdonságokra.
Azok a helyzetek, amelyekben AmbiguousMatchException előfordul, a következők:
- A típus két indexelt tulajdonságot tartalmaz, amelyek neve azonos, de különböző számú paramétert tartalmaz. A kétértelműség feloldásához használja a GetProperty paramétertípusokat meghatározó metódus túlterhelését.
- A származtatott típus deklarál egy olyan tulajdonságot, amely elrejt egy azonos nevű öröklött tulajdonságot a
newmódosító (ShadowsVisual Basic) használatával. A kétértelműség feloldásához a keresés nem öröklődő tagokra való korlátozását is magában foglalja BindingFlags.DeclaredOnly .
GetProperty(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Type, System.Type[], System.Reflection.ParameterModifier[]) metódus
Bár az alapértelmezett kötő nem dolgozza fel a ParameterModifier (a modifiers paramétert), az absztrakt System.Reflection.Binder osztály használatával írhat egy egyedi kötőt, amely feldolgozza a modifiers.
ParameterModifier csak com-interop-on keresztüli híváskor használatos, és csak a hivatkozás által átadott paramétereket kezeli a rendszer.
Az alábbi táblázat azt mutatja be, hogy egy alaposztály mely tagjait adják vissza a metódusok egy Get típuson való tükrözéskor.
| Tagtípus | Static | Nem statikus |
|---|---|---|
| Constructor | No | No |
| Field | No | Yes. A mezők mindig név és aláírás alapján rejthetők el. |
| Event | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A reflection a tulajdonságokat név és aláírás szerinti elrejtésként kezeli. 2 |
| Módszer | No | Yes. A metódusok (mind a virtuális, mind a nem virtuális) elrejthetők név szerint vagy elrejthetők név és aláírás alapján. |
| Beágyazott típus | No | No |
| Property | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A reflection a tulajdonságokat név és aláírás szerinti elrejtésként kezeli. 2 |
Notes:
- A név és aláírás szerinti elrejtés az aláírás összes részét figyelembe veszi, beleértve az egyéni módosítókat, a visszatérési típusokat, a paramétertípusokat, a sentineleket és a nem kezelt hívási konvenciókat. Ez egy bináris összehasonlítás.
- A reflexió során a tulajdonságok és események név és szignatúra szerint vannak elrejtve. Ha az alaposztálynak van egy beolvasási és egy beállítási kiegészítővel rendelkező tulajdonsága, de a származtatott osztálynak csak beolvasási kiegészítője van, a származtatott osztály tulajdonsága elrejti az alaposztály tulajdonságát, és nem tudja majd elérni a beállítót az alaposztályban.
- Az egyéni attribútumok nem részei a gyakori típusrendszernek.
A következő BindingFlags szűrőjelölőkkel határozhatja meg, hogy mely tulajdonságok szerepeljenek a keresésben:
- A visszatéréshez meg kell adnia vagy a
BindingFlags.Instancevagy aBindingFlags.Static. - Adja meg
BindingFlags.Public, hogy a keresésbe belefoglalja a nyilvános tulajdonságokat. - Adja meg
BindingFlags.NonPublic, hogy a keresésbe be legyenek foglalva a nem nyilvános tulajdonságok (azaz a privát, a belső és a védett tulajdonságok). - Adja meg a
BindingFlags.FlattenHierarchy-t, hogy a hierarchiába belefoglalja apublicésprotectedstatikus tagokat; az örökölt osztályokban lévőprivatestatikus tagok nem szerepelnek.
A keresés működésének módosításához az alábbi BindingFlags módosító jelzők használhatók:
-
BindingFlags.IgnoreCasea eset figyelmen kívül hagyásáhozname. -
BindingFlags.DeclaredOnlyúgy keresni, hogy csak a rajta deklarált tulajdonságokra összpontosítsunk Type, nem pedig az egyszerűen öröklött tulajdonságokra.
Indexelők és alapértelmezett tulajdonságok
A Visual Basic, a C# és a C++ egyszerűsített szintaxissal rendelkezik az indexelt tulajdonságok eléréséhez, és lehetővé teszi, hogy egy indexelt tulajdonság legyen az alapértelmezett típus. Ha például a változó myList egyre ArrayListhivatkozik, akkor a szintaxis myList[3] (myList(3) a Visual Basicben) a 3 indexet tartalmazó elemet kéri le. Túlterhelheti a tulajdonságot.
A C#-ban ezt a funkciót indexelőnek nevezik, és név szerint nem lehet rá hivatkozni. Alapértelmezés szerint a C#-indexelő a metaadatokban egy indexelt tulajdonságként Itemjelenik meg. Az osztálykódtár fejlesztője azonban az IndexerNameAttribute attribútummal módosíthatja az indexelő nevét a metaadatokban. Az String osztálynak például van egy indexelője Chars[]. A C# nyelven kívül más nyelvekkel létrehozott indexelt tulajdonságoknak más nevei is lehetnek.
Annak megállapításához, hogy egy típus rendelkezik-e alapértelmezett tulajdonságmal, használja a GetCustomAttributes(Type, Boolean) metódust az DefaultMemberAttribute attribútum teszteléséhez. Ha a típus az DefaultMemberAttribute, a tulajdonság az MemberName alapértelmezett tulajdonság nevét adja vissza.
Lásd még
- PropertyInfo
- String
- DefaultBinder
- GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
- GetProperties(BindingFlags)