Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
Följande vägledning gäller för alla överbelastningar:
- En egenskap anses offentlig vid reflektion om den har minst en accessor som är offentlig. Annars anses egenskapen vara privat och du måste använda BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (i Visual Basic kombinerar du värdena med )
Orför att hämta den. - Om den aktuella Type representerar en konstruerad generisk typ returnerar den här metoden PropertyInfo med typparametrarna ersatta av lämpliga typargument.
- Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom egenskaperna för klassbegränsningen.
GetProperty(String) metod
Sökningen efter name är skiftlägeskänslig. Sökningen inkluderar publika statiska och publika instans-egenskaper.
Situationer där AmbiguousMatchException inträffar är följande:
- En typ innehåller två indexerade egenskaper som har samma namn men olika antal parametrar. Lös tvetydigheten genom att använda en överlagring av metoden GetProperty som anger parametertyper.
- En härledd typ deklarerar en egenskap som döljer en ärvd egenskap med samma namn med hjälp
newav modifieraren (Shadowsi Visual Basic). Lös tvetydigheten genom att använda GetProperty(String, BindingFlags) metodens överlagring och lägga till BindingFlags.DeclaredOnly flaggan för att begränsa sökningen till medlemmar som inte ärvs.
GetProperty(String, BindingFlags) metod
Följande BindingFlags filterflaggor kan användas för att definiera vilka egenskaper som ska inkluderas i sökningen:
- Du måste ange antingen
BindingFlags.InstanceellerBindingFlags.Staticför att få en retur. - Ange
BindingFlags.Publicatt offentliga egenskaper ska inkluderas i sökningen. - Ange
BindingFlags.NonPublicatt icke-offentliga egenskaper (dvs. privata, interna och skyddade egenskaper) ska inkluderas i sökningen. - Ange
BindingFlags.FlattenHierarchyatt inkluderapublicochprotectedstatiska medlemmar i hierarkin.privateStatiska medlemmar i ärvda klasser ingår inte.
Följande BindingFlags modifierarflaggor kan användas för att ändra hur sökningen fungerar:
-
BindingFlags.IgnoreCaseför att ignorera falletnamemed . -
BindingFlags.DeclaredOnlyom du bara vill söka efter de egenskaper som deklarerats i Type, inte egenskaper som helt enkelt ärvts.
Situationer där AmbiguousMatchException inträffar är följande:
- En typ innehåller två indexerade egenskaper som har samma namn men olika antal parametrar. Lös tvetydigheten genom att använda en överlagring av metoden GetProperty som anger parametertyper.
- En härledd typ deklarerar en egenskap som döljer en ärvd egenskap med samma namn med hjälp av
newmodifieraren (Shadowsi Visual Basic). Lös tvetydigheten genom att inkludera BindingFlags.DeclaredOnly för att begränsa sökningen till medlemmar som inte är ärvda.
GetProperty(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Type, System.Type[], System.Reflection.ParameterModifier[])
Även om standardbindaren inte bearbetar ParameterModifier (parametern modifiers) kan du använda den abstrakta klassen System.Reflection.Binder för att skriva en anpassad bindare som bearbetar modifiers.
ParameterModifier används endast vid anrop via COM-interop, och endast parametrar som skickas av referens hanteras.
I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.
| Medlemstyp | Statisk | Icke-statisk |
|---|---|---|
| Konstruktor | Nej | Nej |
| Fält | Nej | Ja. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature). |
| Evenemang | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. 2 |
| Metod | Nej | Ja. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature. |
| Kapslad typ | Nej | Nej |
| Fastighet | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. 2 |
Anteckningar:
- Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.
- För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.
- Anpassade attribut ingår inte i det vanliga typsystemet.
Följande BindingFlags filterflaggor kan användas för att definiera vilka egenskaper som ska inkluderas i sökningen:
- Du måste ange antingen
BindingFlags.InstanceellerBindingFlags.Staticför att få en retur. - Ange
BindingFlags.Publicatt offentliga egenskaper ska inkluderas i sökningen. - Ange
BindingFlags.NonPublicatt icke-offentliga egenskaper (dvs. privata, interna och skyddade egenskaper) ska inkluderas i sökningen. - Ange
BindingFlags.FlattenHierarchyatt inkluderapublicochprotectedstatiska medlemmar i hierarkin.privateStatiska medlemmar i ärvda klasser ingår inte.
Följande BindingFlags modifierarflaggor kan användas för att ändra hur sökningen fungerar:
-
BindingFlags.IgnoreCaseför att ignorera falletnamemed . -
BindingFlags.DeclaredOnlyom du bara vill söka efter de egenskaper som deklarerats i Type, inte egenskaper som helt enkelt ärvts.
Indexerare och standardegenskaper
Visual Basic, C#och C++ har förenklad syntax för åtkomst till indexerade egenskaper och tillåter att en indexerad egenskap är standard för dess typ. Om variabeln myList till exempel refererar till en ArrayListhämtar syntaxen myList[3] (myList(3) i Visual Basic) elementet med indexet 3. Du kan överbelasta egenskapen.
I C# kallas den här funktionen för indexerare och kan inte refereras till med namn. Som standard visas en C#-indexerare i metadata som en indexerad egenskap med namnet Item. En klassbiblioteksutvecklare kan dock använda IndexerNameAttribute attributet för att ändra namnet på indexeraren i metadata. Klassen String har till exempel en indexerare med namnet Chars[]. Indexerade egenskaper som skapats med andra språk än C# kan också ha andra namn än Item.
Om du vill avgöra om en typ har en standardegenskap använder du GetCustomAttributes(Type, Boolean) metoden för att testa attributet DefaultMemberAttribute . Om typen har DefaultMemberAttributeMemberName returnerar egenskapen namnet på standardegenskapen.