Nyelv

Type.GetProperty Metódus

Definíció

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.

name az null.

-vagy-

types az null.

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

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.

name az null.

-vagy-

types az null.

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 new mó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.Instance vagy a BindingFlags.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 a public és protected statikus tagokat; az örökölt osztályokban lévő private statikus 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.IgnoreCase a eset figyelmen kívül hagyásához name.
  • 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 new módosító (Shadows Visual 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.Instance vagy a BindingFlags.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 a public és protected statikus tagokat; az örökölt osztályokban lévő private statikus 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.IgnoreCase a eset figyelmen kívül hagyásához name.
  • 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

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.

name az null.

-vagy-

types az null.

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

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.

name az null.

-vagy-

types az null.

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

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

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

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 new mó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.Instance vagy a BindingFlags.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 a public és protected statikus tagokat; az örökölt osztályokban lévő private statikus 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.IgnoreCase a eset figyelmen kívül hagyásához name.
  • 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 new módosító (Shadows Visual 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.Instance vagy a BindingFlags.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 a public és protected statikus tagokat; az örökölt osztályokban lévő private statikus 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.IgnoreCase a eset figyelmen kívül hagyásához name.
  • 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

A következőre érvényes: