Type.GetFields 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 Typemezőit.
Túlterhelések
| Name | Description |
|---|---|
| GetFields() |
Az aktuális Typenyilvános mezőket adja vissza. |
| GetFields(BindingFlags) |
Ha egy származtatott osztályban felül van bírálva, megkeresi az aktuálishoz Typedefiniált mezőket a megadott kötési megkötések használatával. |
GetFields()
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Az aktuális Typenyilvános mezőket adja vissza.
public:
cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
public:
virtual cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]
public System.Reflection.FieldInfo[] GetFields();
public System.Reflection.FieldInfo[] GetFields();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)>]
member this.GetFields : unit -> System.Reflection.FieldInfo[]
member this.GetFields : unit -> System.Reflection.FieldInfo[]
abstract member GetFields : unit -> System.Reflection.FieldInfo[]
override this.GetFields : unit -> System.Reflection.FieldInfo[]
Public Function GetFields () As FieldInfo()
Válaszok
Az aktuálishoz FieldInfodefiniált összes nyilvános mezőt képviselő objektumtömbType.
-vagy-
Üres típusú FieldInfotömb, ha az aktuálishoz Typenincs meghatározva nyilvános mező.
Megvalósítás
- Attribútumok
Példák
Az alábbi példa a GetFields() metódus használatát mutatja be.
using System;
using System.Reflection;
using System.ComponentModel.Design;
class FieldInfo_IsSpecialName
{
public static void Main()
{
try
{
// Get the type handle of a specified class.
Type myType = typeof(ViewTechnology);
// Get the fields of the specified class.
FieldInfo[] myField = myType.GetFields();
Console.WriteLine("\nDisplaying fields that have SpecialName attributes:\n");
for(int i = 0; i < myField.Length; i++)
{
// Determine whether or not each field is a special name.
if(myField[i].IsSpecialName)
{
Console.WriteLine("The field {0} has a SpecialName attribute.",
myField[i].Name);
}
}
}
catch(Exception e)
{
Console.WriteLine("Exception : {0} " , e.Message);
}
}
}
open System.ComponentModel.Design
try
// Get the type handle of a specified class.
let myType = typeof<ViewTechnology>
// Get the fields of the specified class.
let myFields = myType.GetFields()
printfn $"\nDisplaying fields that have SpecialName attributes:\n"
for field in myFields do
// Determine whether or not each field is a special name.
if field.IsSpecialName then
printfn $"The field {field.Name} has a SpecialName attribute."
with e ->
printfn $"Exception : {e.Message} "
Imports System.Reflection
Imports System.ComponentModel.Design
Class FieldInfo_IsSpecialName
Public Shared Sub Main()
Try
' Get the type handle of a specified class.
Dim myType As Type = GetType(ViewTechnology)
' Get the fields of a specified class.
Dim myField As FieldInfo() = myType.GetFields()
Console.WriteLine(ControlChars.Cr + "Displaying fields that have SpecialName attributes:" + ControlChars.Cr)
Dim i As Integer
For i = 0 To myField.Length - 1
' Determine whether or not each field is a special name.
If myField(i).IsSpecialName Then
Console.WriteLine("The field {0} has a SpecialName attribute.", myField(i).Name)
End If
Next i
Catch e As Exception
Console.WriteLine("Exception : {0} ", e.Message.ToString())
End Try
End Sub
End Class
Megjegyzések
A .NET 6-os és korábbi verzióiban a GetFields metódus nem ad vissza mezőket egy adott sorrendben, például betűrendben vagy deklarációs sorrendben. A kód nem függ a visszaadott mezők sorrendjétől, mert ez a sorrend eltérő. A 7. .NET kezdve azonban a rendezés determinisztikus a szerelvény metaadatainak sorrendje alapján.
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. |
| Esemény | 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 tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
| 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 |
| Ingatlan | 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 tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
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.
Ha az áram Type egy konstruktált általános típust jelöl, ez a metódus az FieldInfo objektumokat a megfelelő típusargumentumokkal helyettesített típusparaméterekkel adja vissza.
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 az osztálykényszer nyilvános mezőit keresi.
Lásd még
A következőre érvényes:
GetFields(BindingFlags)
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Ha egy származtatott osztályban felül van bírálva, megkeresi az aktuálishoz Typedefiniált mezőket a megadott kötési megkötések használatával.
public:
abstract cli::array <System::Reflection::FieldInfo ^> ^ GetFields(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]
public abstract System.Reflection.FieldInfo[] GetFields(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.FieldInfo[] GetFields(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)>]
abstract member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo[]
abstract member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo[]
Public MustOverride Function GetFields (bindingAttr As BindingFlags) As FieldInfo()
Paraméterek
- bindingAttr
- BindingFlags
A számbavételi értékek bitenkénti kombinációja, amely meghatározza a keresés menetét.
-vagy-
Default üres tömb visszaadásához.
Válaszok
Az aktuálishoz FieldInfo definiált összes mezőt képviselő objektumtömbType, amely megfelel a megadott kötési korlátozásoknak.
-vagy-
Üres típusú FieldInfotömb, ha nincs definiálva mező az aktuálishoz Type, vagy ha a megadott mezők egyike sem felel meg a kötési korlátozásoknak.
Megvalósítás
- Attribútumok
Példák
Az alábbi példa a GetFields(BindingFlags) metódus használatát mutatja be.
using System;
using System.Reflection;
class AttributesSample
{
public void Mymethod (int int1m, out string str2m, ref string str3m)
{
str2m = "in Mymethod";
}
public static int Main(string[] args)
{
Console.WriteLine ("Reflection.MethodBase.Attributes Sample");
// Get the type.
Type MyType = Type.GetType("AttributesSample");
// Get the method Mymethod on the type.
MethodBase Mymethodbase = MyType.GetMethod("Mymethod");
// Display the method name.
Console.WriteLine("Mymethodbase = " + Mymethodbase);
// Get the MethodAttribute enumerated value.
MethodAttributes Myattributes = Mymethodbase.Attributes;
// Display the flags that are set.
PrintAttributes(typeof(System.Reflection.MethodAttributes), (int) Myattributes);
return 0;
}
public static void PrintAttributes(Type attribType, int iAttribValue)
{
if (!attribType.IsEnum)
{
Console.WriteLine("This type is not an enum.");
return;
}
FieldInfo[] fields = attribType.GetFields(BindingFlags.Public | BindingFlags.Static);
for (int i = 0; i < fields.Length; i++)
{
int fieldvalue = (int)fields[i].GetValue(null);
if ((fieldvalue & iAttribValue) == fieldvalue)
{
Console.WriteLine(fields[i].Name);
}
}
}
}
open System
open System.Reflection
type AttributesSample() =
member _.Mymethod(int1m: int, str2m: string outref, str3m: string byref) =
str2m <- "in Mymethod"
let printAttributes (attribType: Type) iAttribValue =
if not attribType.IsEnum then
printfn "This type is not an enum."
else
let fields = attribType.GetFields(BindingFlags.Public ||| BindingFlags.Static)
for f in fields do
let fieldvalue = f.GetValue null :?> int
if fieldvalue &&& iAttribValue = fieldvalue then
printfn $"{f.Name}"
printfn "Reflection.MethodBase.Attributes Sample"
// Get the type.
let MyType = Type.GetType "AttributesSample"
// Get the method Mymethod on the type.
let Mymethodbase = MyType.GetMethod "Mymethod"
// Display the method name.
printfn $"Mymethodbase = {Mymethodbase}"
// Get the MethodAttribute enumerated value.
let Myattributes = Mymethodbase.Attributes
// Display the flags that are set.
printAttributes typeof<MethodAttributes> (int Myattributes)
Imports System.Reflection
Class AttributesSample
Public Sub Mymethod(ByVal int1m As Integer, ByRef str2m As String, ByRef str3m As String)
str2m = "in Mymethod"
End Sub
Public Shared Function Main(ByVal args() As String) As Integer
Console.WriteLine("Reflection.MethodBase.Attributes Sample")
' Get the type.
Dim MyType As Type = Type.GetType("AttributesSample")
' Get the method Mymethod on the type.
Dim Mymethodbase As MethodBase = MyType.GetMethod("Mymethod")
' Display the method name.
Console.WriteLine("Mymethodbase = {0}.", Mymethodbase)
' Get the MethodAttribute enumerated value.
Dim Myattributes As MethodAttributes = Mymethodbase.Attributes
' Display the flags that are set.
PrintAttributes(GetType(System.Reflection.MethodAttributes), CInt(Myattributes))
Return 0
End Function 'Main
Public Shared Sub PrintAttributes(ByVal attribType As Type, ByVal iAttribValue As Integer)
If Not attribType.IsEnum Then
Console.WriteLine("This type is not an enum.")
Return
End If
Dim fields As FieldInfo() = attribType.GetFields((BindingFlags.Public Or BindingFlags.Static))
Dim i As Integer
For i = 0 To fields.Length - 1
Dim fieldvalue As Integer = CType(fields(i).GetValue(Nothing), Int32)
If (fieldvalue And iAttribValue) = fieldvalue Then
Console.WriteLine(fields(i).Name)
End If
Next i
End Sub
End Class
Megjegyzések
Ahhoz, hogy a GetFields(BindingFlags) túlterhelés sikeresen lekérje a tulajdonságinformációkat, az bindingAttr argumentumnak tartalmaznia BindingFlags.InstanceBindingFlags.Static kell legalább az egyiket és az egyiket is.BindingFlags.NonPublicBindingFlags.Public
Az alábbi BindingFlags szűrőjelölők segítségével határozhatja meg, hogy mely mezők legyenek belefoglalva a keresésbe:
Adja meg
BindingFlags.Instance, hogy a példány metódusai is szerepeljenek.Adja meg
BindingFlags.Static, hogy statikus metódusokat is tartalmazzon.Adja meg
BindingFlags.Public, hogy nyilvános mezőket is belefoglaljon a keresésbe.Adja meg
BindingFlags.NonPublic, hogy nem nyilvános mezőket (azaz privát, belső és védett mezőket) is belefoglaljon a keresésbe. A rendszer csak a védett és belső mezőket adja vissza az alaposztályokon; a rendszer nem ad vissza privát mezőket az alaposztályokon.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.Adjon meg
BindingFlags.Defaultönállóan egy üres PropertyInfo tömb visszaadásához.
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.DeclaredOnlycsak a deklarált Typemezők keresésére, nem pedig az egyszerűen öröklődő mezőkre.
További információért lásd a System.Reflection.BindingFlags jelű részt.
A .NET 6-os és korábbi verzióiban a GetFields metódus nem ad vissza mezőket egy adott sorrendben, például betűrendben vagy deklarációs sorrendben. A kód nem függ a visszaadott mezők sorrendjétől, mert ez a sorrend eltérő. A 7. .NET kezdve azonban a rendezés determinisztikus a szerelvény metaadatainak sorrendje alapján.
Ha az áram Type egy konstruktált általános típust jelöl, ez a metódus az FieldInfo objektumokat a megfelelő típusargumentumokkal helyettesített típusparaméterekkel adja vissza.
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 az osztálykényszer nyilvános mezőit keresi.