PropertyInfo.GetValue 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.
Egy adott objektum tulajdonságértékét adja vissza.
Túlterhelések
| Name | Description |
|---|---|
| GetValue(Object) |
Egy adott objektum tulajdonságértékét adja vissza. |
| GetValue(Object, Object[]) |
Egy adott objektum tulajdonságértékét adja vissza az indexelt tulajdonságok opcionális indexértékeivel. |
| GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) |
Ha egy származtatott osztályban felülbírált, egy megadott objektum tulajdonságértékét adja vissza, amely rendelkezik a megadott kötéssel, indexel és kultúraspecifikus információkkal. |
GetValue(Object)
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
Egy adott objektum tulajdonságértékét adja vissza.
public:
System::Object ^ GetValue(System::Object ^ obj);
public object GetValue(object obj);
public object? GetValue(object? obj);
member this.GetValue : obj -> obj
Public Function GetValue (obj As Object) As Object
Paraméterek
- obj
- Object
Az az objektum, amelynek a tulajdonságértéke lesz visszaadva.
Válaszok
A megadott objektum tulajdonságértéke.
Példák
Az alábbi példa egy osztályt Planet határoz meg, amelynek két tulajdonsága van: Namea bolygó neve, és Distancea bolygó Távolsága a Földtől. A példa létrehoz egy Planet objektumot, amely a Jupiter bolygót jelképezi, és átadja azt egy GetPropertyValues olyan metódusnak, amely információkat jelenít meg a tulajdonságokról, és a GetValue metódus használatával lekéri az egyes Planet tulajdonságok értékét.
using System;
using System.Reflection;
public class Planet
{
private String planetName;
private Double distanceFromEarth;
public Planet(String name, Double distance)
{
planetName = name;
distanceFromEarth = distance;
}
public String Name
{ get { return planetName; } }
public Double Distance
{ get { return distanceFromEarth; }
set { distanceFromEarth = value; } }
}
public class Example
{
public static void Main()
{
Planet jupiter = new Planet("Jupiter", 3.65e08);
GetPropertyValues(jupiter);
}
private static void GetPropertyValues(Object obj)
{
Type t = obj.GetType();
Console.WriteLine("Type is: {0}", t.Name);
PropertyInfo[] props = t.GetProperties();
Console.WriteLine("Properties (N = {0}):",
props.Length);
foreach (var prop in props)
if (prop.GetIndexParameters().Length == 0)
Console.WriteLine(" {0} ({1}): {2}", prop.Name,
prop.PropertyType.Name,
prop.GetValue(obj));
else
Console.WriteLine(" {0} ({1}): <Indexed>", prop.Name,
prop.PropertyType.Name);
}
}
// The example displays the following output:
// Type is: Planet
// Properties (N = 2):
// Name (String): Jupiter
// Distance (Double): 365000000
Imports System.Reflection
Public Class Planet
Private planetName As String
Private distanceFromEarth As Double
Public Sub New(name As String, distance As Double)
planetName = name
distanceFromEarth = distance
End Sub
Public ReadOnly Property Name As String
Get
Return planetName
End Get
End Property
Public Property Distance As Double
Get
Return distanceFromEarth
End Get
Set
distanceFromEarth = value
End Set
End Property
End Class
Module Example
Public Sub Main()
Dim jupiter As New Planet("Jupiter", 3.65e08)
GetPropertyValues(jupiter)
End Sub
Private Sub GetPropertyValues(obj As Object)
Dim t As Type = obj.GetType()
Console.WriteLine("Type is: {0}", t.Name)
Dim props() As PropertyInfo = t.GetProperties()
Console.WriteLine("Properties (N = {0}):",
props.Length)
For Each prop In props
If prop.GetIndexParameters().Length = 0 Then
Console.WriteLine(" {0} ({1}): {2}", prop.Name,
prop.PropertyType.Name,
prop.GetValue(obj))
Else
Console.WriteLine(" {0} ({1}): <Indexed>", prop.Name,
prop.PropertyType.Name)
End If
Next
End Sub
End Module
' The example displays the following output:
' Type is: Planet
' Properties (N = 2):
' Name (String): Jupiter
' Distance (Double): 365000000
Megjegyzések
A túlterhelést egy GetValue(Object) nem indexelt tulajdonság értékének lekéréséhez hívja meg; ha egy indexelt tulajdonság értékét próbálja lekérni, a metódus kivételt TargetParameterCountException jelez. A metódus meghívásával GetIndexParameters meghatározhatja, hogy egy tulajdonság indexelt-e vagy sem. Ha a visszaadott ParameterInfo tömb hossza nulla, a tulajdonság nincs indexelve.
Ez egy egyszerű metódus, amely implementációt biztosít az absztrakt GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) metódushoz BindingFlags , amelynek paramétere BindingFlags.Defaulta következő, a Binder halmaz nullértéke, a beállított nullindexértékek objektumtömbje és a CultureInfo beállított nullérték.
A következőre érvényes:
GetValue(Object, Object[])
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
Egy adott objektum tulajdonságértékét adja vissza az indexelt tulajdonságok opcionális indexértékeivel.
public:
virtual System::Object ^ GetValue(System::Object ^ obj, cli::array <System::Object ^> ^ index);
public virtual object GetValue(object obj, object[] index);
public virtual object? GetValue(object? obj, object?[]? index);
abstract member GetValue : obj * obj[] -> obj
override this.GetValue : obj * obj[] -> obj
Public Overridable Function GetValue (obj As Object, index As Object()) As Object
Paraméterek
- obj
- Object
Az az objektum, amelynek a tulajdonságértéke lesz visszaadva.
- index
- Object[]
Nem kötelező indexértékek indexelt tulajdonságokhoz. Az indexelt tulajdonságok indexei nulla alapúak. Ennek az értéknek nem indexelt tulajdonságoknak kell lennie null .
Válaszok
A megadott objektum tulajdonságértéke.
Megvalósítás
Kivételek
A index tömb nem tartalmazza a szükséges argumentumtípust.
-vagy-
A tulajdonság tartozéka get nem található.
Az objektum nem egyezik a céltípussal, vagy egy tulajdonság egy példánytulajdonság, de obj az null.
Megjegyzés: Az .NET Windows Áruházbeli alkalmazások vagy a Portable Osztálytár esetében inkább Exception.
A paraméterek index száma nem egyezik meg az indexelt tulajdonság által használt paraméterek számával.
Illegális kísérlet történt egy privát vagy védett metódus elérésére egy osztályon belül.
Megjegyzés: Az .NET Windows Áruházbeli alkalmazások vagy a Portable Class Library esetében inkább az alaposztály kivételét MemberAccessException.
Hiba történt a tulajdonságérték beolvasása közben. Egy indexelt tulajdonsághoz megadott indexérték például túllépi a tartományt. A InnerException tulajdonság a hiba okát jelzi.
Példák
Az alábbi példa bemutatja, hogyan szerezheti be egy indexelt tulajdonság értékét. A String.Chars[] tulajdonság az osztály alapértelmezett tulajdonsága (a C#-ban lévő String indexelő).
using System;
using System.Reflection;
class Example
{
public static void Main()
{
string test = "abcdefghijklmnopqrstuvwxyz";
// Get a PropertyInfo object representing the Chars property.
PropertyInfo pinfo = typeof(string).GetProperty("Chars");
// Show the first, seventh, and last letters
ShowIndividualCharacters(pinfo, test, 0, 6, test.Length - 1);
// Show the complete string.
Console.Write("The entire string: ");
for (int x = 0; x < test.Length; x++)
{
Console.Write(pinfo.GetValue(test, new Object[] {x}));
}
Console.WriteLine();
}
static void ShowIndividualCharacters(PropertyInfo pinfo,
object value,
params int[] indexes)
{
foreach (var index in indexes)
Console.WriteLine("Character in position {0,2}: '{1}'",
index, pinfo.GetValue(value, new object[] { index }));
Console.WriteLine();
}
}
// The example displays the following output:
// Character in position 0: 'a'
// Character in position 6: 'g'
// Character in position 25: 'z'
//
// The entire string: abcdefghijklmnopqrstuvwxyz
Imports System.Reflection
Module Example
Sub Main()
Dim test As String = "abcdefghijklmnopqrstuvwxyz"
' Get a PropertyInfo object representing the Chars property.
Dim pinfo As PropertyInfo = GetType(String).GetProperty("Chars")
' Show the first, seventh, and last characters.
ShowIndividualCharacters(pinfo, test, { 0, 6, test.Length - 1 })
' Show the complete string.
Console.Write("The entire string: ")
For x As Integer = 0 To test.Length - 1
Console.Write(pinfo.GetValue(test, { x }))
Next
Console.WriteLine()
End Sub
Sub ShowIndividualCharacters(pinfo As PropertyInfo,
value As Object,
ParamArray indexes() As Integer)
For Each index In indexes
Console.WriteLine("Character in position {0,2}: '{1}'",
index, pinfo.GetValue(value, { index }))
Next
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' Character in position 0: 'a'
' Character in position 6: 'g'
' Character in position 25: 'z'
'
' The entire string: abcdefghijklmnopqrstuvwxyz
Megjegyzések
Annak megállapításához, hogy egy tulajdonság indexelt-e, használja a metódust GetIndexParameters . Ha az eredményként kapott tömb 0 (nulla) elemet tartalmaz, a tulajdonság nincs indexelve.
Ez egy olyan kényelmi módszer, amely az absztrakt GetValue metódus implementációját biztosítja a következő paraméterrel:BindingFlagsDefaultBindernullCultureInfonull
Mivel a statikus tulajdonságok nem az egyes objektumok, hanem a típushoz tartoznak, az objektum argumentumaként való null átadással statikus tulajdonságokat kaphat. A következő kód használatával például lekérheti a következő statikus CurrentCulture tulajdonságot CultureInfo :
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
A metódus használatához GetValue először szerezze be az osztályt Type.
TypeA helyről szerezze be a PropertyInfo. Használja a PropertyInfometódust.GetValue
Note
Ez a módszer akkor használható a nem nyilvános tagok elérésére, ha a hívó a jelölővel ReflectionPermission rendelkezikReflectionPermissionFlag.RestrictedMemberAccess, és ha a nem nyilvános tagok támogatási készlete a hívó támogatási csoportjára vagy annak egy részhalmazára korlátozódik. (Lásd: A tükröződés biztonsági szempontjai.) A funkció használatához az alkalmazásnak .NET Framework 3.5-ös vagy újabb verziójára kell irányulnia.
A következőre érvényes:
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
- Forrás:
- PropertyInfo.cs
Ha egy származtatott osztályban felülbírált, egy megadott objektum tulajdonságértékét adja vissza, amely rendelkezik a megadott kötéssel, indexel és kultúraspecifikus információkkal.
public:
abstract System::Object ^ GetValue(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ index, System::Globalization::CultureInfo ^ culture);
public abstract object? GetValue(object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? index, System.Globalization.CultureInfo? culture);
public abstract object GetValue(object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] index, System.Globalization.CultureInfo culture);
abstract member GetValue : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public MustOverride Function GetValue (obj As Object, invokeAttr As BindingFlags, binder As Binder, index As Object(), culture As CultureInfo) As Object
Paraméterek
- obj
- Object
Az az objektum, amelynek a tulajdonságértéke lesz visszaadva.
- invokeAttr
- BindingFlags
A következő enumerálási tagok bitenkénti kombinációja, amely megadja a hívási attribútumot: InvokeMethod, , CreateInstance, Static, GetFieldSetField, GetPropertyés SetProperty. Meg kell adnia egy megfelelő meghívási attribútumot. Statikus tag meghívásához például állítsa be a jelölőt Static .
- binder
- Binder
Olyan objektum, amely lehetővé teszi az argumentumtípusok kötését, kényszerítését, a tagok meghívását és az objektumok visszaverésen keresztüli lekérését MemberInfo . Ha binder igen null, akkor a rendszer az alapértelmezett kötőanyagot használja.
- index
- Object[]
Nem kötelező indexértékek indexelt tulajdonságokhoz. Ennek az értéknek nem indexelt tulajdonságoknak kell lennie null .
- culture
- CultureInfo
Az a kultúra, amelyhez az erőforrást honosítanák. Ha az erőforrás nincs honosítva ehhez a kultúrához, a rendszer egymás után hívja meg a Parent tulajdonságot egyezés keresésekor. Ha ez az érték, nulla kultúraspecifikus információk a CurrentUICulture tulajdonságból lesznek lekértek.
Válaszok
A megadott objektum tulajdonságértéke.
Megvalósítás
Kivételek
A index tömb nem tartalmazza a szükséges argumentumtípust.
-vagy-
A tulajdonság tartozéka get nem található.
Az objektum nem egyezik a céltípussal, vagy egy tulajdonság egy példánytulajdonság, de obj az null.
A paraméterek index száma nem egyezik meg az indexelt tulajdonság által használt paraméterek számával.
Illegális kísérlet történt egy privát vagy védett metódus elérésére egy osztályon belül.
Hiba történt a tulajdonságérték beolvasása közben. Egy indexelt tulajdonsághoz megadott indexérték például túllépi a tartományt. A InnerException tulajdonság a hiba okát jelzi.
Megjegyzések
Annak megállapításához, hogy egy tulajdonság indexelt-e, használja a metódust GetIndexParameters . Ha az eredményként kapott tömb 0 (nulla) elemet tartalmaz, a tulajdonság nincs indexelve.
Mivel a statikus tulajdonságok nem az egyes objektumok, hanem a típushoz tartoznak, az objektum argumentumaként való null átadással statikus tulajdonságokat kaphat. A következő kód használatával például lekérheti a következő statikus CurrentCulture tulajdonságot CultureInfo :
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
A metódus használatához GetValue először szerezze be az osztályt Type.
TypeA helyről szerezze be a PropertyInfo. Használja a PropertyInfometódust.GetValue
Note
Ez a módszer akkor használható a nem nyilvános tagok elérésére, ha a hívó a jelölővel ReflectionPermission rendelkezikReflectionPermissionFlag.RestrictedMemberAccess, és ha a nem nyilvános tagok támogatási készlete a hívó támogatási csoportjára vagy annak egy részhalmazára korlátozódik. (Lásd: A tükröződés biztonsági szempontjai.) A funkció használatához az alkalmazásnak .NET Framework 3.5-ös vagy újabb verziójára kell irányulnia.