Type.GetFields Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Geçerli alanının alanlarını alır Type .
Aşırı Yüklemeler
GetFields() |
Geçerli tüm ortak alanları döndürür Type . |
GetFields(BindingFlags) |
Türetilmiş bir sınıfta geçersiz kılınırsa, belirtilen bağlama kısıtlamalarını kullanarak geçerli için tanımlanan alanları arar Type . |
GetFields()
Geçerli tüm ortak alanları döndürür Type .
public:
cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
public:
virtual cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
public System.Reflection.FieldInfo[] GetFields ();
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()
Döndürülenler
FieldInfoGeçerli için tanımlanan tüm ortak alanları temsil eden nesne dizisi Type .
-veya- FieldInfoGeçerli bir ortak alan tanımlıysa, türü boş bir dizi Type .
Uygulamalar
Örnekler
Aşağıdaki örnek yönteminin bir kullanımını gösterir GetFields()
.
#using <system.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel::Design;
int main()
{
try
{
// Get the type handle of a specified class.
Type^ myType = ViewTechnology::typeid;
// Get the fields of the specified class.
array<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 );
}
}
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);
}
}
}
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
Açıklamalar
GetFieldsBu yöntem, alanları alfabetik veya bildirim sırası gibi belirli bir sırada döndürmez. Kodunuzun, alanların döndürüldüğü sıraya bağlı olmaması gerekir, çünkü bu sıra değişir.
Aşağıdaki tabloda, Get
bir tür üzerinde yansıtılırken yöntemler tarafından bir temel sınıfın hangi üyelerinin döndürüldüğü gösterilmektedir.
Üye Türü | Statik | Statik Olmayan |
---|---|---|
Oluşturucu | Hayır | Hayır |
Alan | Hayır | Evet. Bir alan her zaman "ada ve imzaya göre gizle" özelliğindedir. |
Olay | Uygulanamaz | Ortak tür sistemi kuralı, devralma işleminin özelliği uygulayan yöntemlerinkiyle aynı olmasıdır. Yansıma, özellikleri "ada ve imzaya göre gizle" şeklinde kullanır. Aşağıdaki 2. nota bakın. |
Yöntem | Hayır | Evet. Bir yöntem (sanal ve sanal olmayan) "ada göre gizle" veya "ada ve imzaya göre gizle" özelliğinde olabilir. |
İç İçe Tür | Hayır | Hayır |
Özellik | Uygulanamaz | Ortak tür sistemi kuralı, devralma işleminin özelliği uygulayan yöntemlerinkiyle aynı olmasıdır. Yansıma, özellikleri "ada ve imzaya göre gizle" şeklinde kullanır. Aşağıdaki 2. nota bakın. |
"Ada ve imzaya göre gizle" özelliği, imzanın tüm parçalarını (özel değiştiriciler, dönüş türleri, parametre türleri, başlangıç/bitiş simgeleri ve yönetilmeyen çağrı kuralları dahil) dikkate alır. Bu ikili bir karşılaştırmadır.
Yansıma için, özellikler ve olaylar "ada ve imzaya göre gizle" özelliğindedir. Bu temel sınıfta hem alma hem de ayarlama erişimcisine sahip bir özelliğiniz varsa, ancak türetilen sınıfın yalnızca bir alma erişimcisi varsa, türetilen sınıf özelliği temel sınıf özelliğini gizler ve siz de temel sınıfta ayarlayıcıya erişemezsiniz.
Özel öznitelikler ortak tür sisteminin parçası değildir.
Geçerli, Type oluşturulmuş bir genel türü temsil ediyorsa, bu yöntem FieldInfo tür parametrelerine sahip nesneleri uygun tür bağımsız değişkenleri ile birlikte döndürür.
Geçerli, Type genel bir türün veya genel yöntemin tanımındaki bir tür parametresini temsil ediyorsa, bu yöntem sınıf kısıtlamasının ortak alanlarını arar.
Ayrıca bkz.
Şunlara uygulanır
GetFields(BindingFlags)
Türetilmiş bir sınıfta geçersiz kılınırsa, belirtilen bağlama kısıtlamalarını kullanarak geçerli için tanımlanan alanları arar Type .
public:
abstract cli::array <System::Reflection::FieldInfo ^> ^ GetFields(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.FieldInfo[] GetFields (System.Reflection.BindingFlags bindingAttr);
abstract member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo[]
Public MustOverride Function GetFields (bindingAttr As BindingFlags) As FieldInfo()
Parametreler
- bindingAttr
- BindingFlags
Aramanın nasıl yürütüldüğünü belirten numaralandırma değerlerinin bit düzeyinde birleşimi.
-veya-
Default boş bir dizi döndürmek için.
Döndürülenler
FieldInfoGeçerli için tanımlanan, Type belirtilen bağlama kısıtlamalarıyla eşleşen tüm alanları temsil eden nesne dizisi.
-veya- FieldInfoGeçerli öğe için tanımlı bir alan yoksa Type veya tanımlı alanlardan hiçbiri bağlama kısıtlamalarıyla eşleşmezse, türünde boş bir dizi.
Uygulamalar
Örnekler
Aşağıdaki örnek yönteminin bir kullanımını gösterir GetFields(BindingFlags)
.
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;
public ref class AttributesSample
{
public:
void Mymethod( int int1m, [Out]interior_ptr<String^> str2m, interior_ptr<String^> str3m )
{
*str2m = "in Mymethod";
}
};
void PrintAttributes( Type^ attribType, int iAttribValue )
{
if ( !attribType->IsEnum )
{
Console::WriteLine( "This type is not an enum." );
return;
}
array<FieldInfo^>^fields = attribType->GetFields( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static) );
for ( int i = 0; i < fields->Length; i++ )
{
int fieldvalue = safe_cast<Int32>(fields[ i ]->GetValue( nullptr ));
if ( (fieldvalue & iAttribValue) == fieldvalue )
{
Console::WriteLine( fields[ i ]->Name );
}
}
}
int main()
{
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 = {0}", Mymethodbase );
// Get the MethodAttribute enumerated value.
MethodAttributes Myattributes = Mymethodbase->Attributes;
// Display the flags that are set.
PrintAttributes( System::Reflection::MethodAttributes::typeid, (int)Myattributes );
return 0;
}
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);
}
}
}
}
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
Açıklamalar
GetFields(BindingFlags)
Özellik bilgilerini başarıyla almak için aşırı yüklemede, ve en az bindingAttr
bir ile birlikte bağımsız değişken en az bir BindingFlags.Instance ve içermelidir BindingFlags.Static BindingFlags.NonPublic BindingFlags.Public .
BindingFlagsAramaya hangi alanların ekleneceğini tanımlamak için aşağıdaki filtre bayrakları kullanılabilir:
BindingFlags.Instance
Örnek yöntemlerinin dahil edileceğini belirtin.BindingFlags.Static
Statik yöntemlerin dahil edileceğini belirtin.BindingFlags.Public
Aramaya genel alanları dahil etmek için belirtin.BindingFlags.NonPublic
Aramada genel olmayan alanları (özel, iç ve korumalı alanları) dahil etmek için belirtin. Yalnızca temel sınıflarda korunan ve iç alanlar döndürülür; taban sınıflardaki özel alanlar döndürülmedi.BindingFlags.FlattenHierarchy
Hiyerarşinin dahil edileceğinipublic
veprotected
statik üyelerini belirtin;private
devralınan sınıflarda statik üyeler dahil değildir.BindingFlags.Default
Boş bir dizi döndürmek için tek başına belirtin PropertyInfo .
BindingFlagsAramanın nasıl çalıştığını değiştirmek için aşağıdaki değiştirici bayrakları kullanılabilir:
BindingFlags.DeclaredOnly
yalnızca ' de tanımlanan alanları aramak için Type , yalnızca devralınmış alanlarda değil.
Daha fazla bilgi edinmek için bkz. System.Reflection.BindingFlags.
GetFieldsBu yöntem, alanları alfabetik veya bildirim sırası gibi belirli bir sırada döndürmez. Kodunuzun, alanların döndürüldüğü sıraya bağlı olmaması gerekir, çünkü bu sıra değişir.
Geçerli, Type oluşturulmuş bir genel türü temsil ediyorsa, bu yöntem FieldInfo tür parametrelerine sahip nesneleri uygun tür bağımsız değişkenleri ile birlikte döndürür.
Geçerli, Type genel bir türün veya genel yöntemin tanımındaki bir tür parametresini temsil ediyorsa, bu yöntem sınıf kısıtlamasının ortak alanlarını arar.