Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

BindingFlags-Enumeration

Gibt Flags an, die die Bindung und das Verfahren steuern, mit dem die Suche nach Membern und Typen mithilfe von Reflektion durchgeführt wird.

Diese Enumeration verfügt über ein FlagsAttribute-Attribut, das die bitweise Kombination der Memberwerte zulässt.

Namespace:  System.Reflection
Assembly:  mscorlib (in mscorlib.dll)
[SerializableAttribute]
[FlagsAttribute]
[ComVisibleAttribute(true)]
public enum BindingFlags
MembernameBeschreibung
Unterstützt von XNA FrameworkDefaultGibt kein Bindungsflag an.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekIgnoreCaseGibt an, dass bei der Bindung die Groß- und Kleinschreibung des Membernamens nicht berücksichtigt werden soll.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekDeclaredOnlyGibt an, dass nur Member berücksichtigt werden sollen, die auf der Hierarchieebene des angegebenen Typs deklariert wurden. Vererbte Member werden nicht berücksichtigt.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekInstanceGibt an, dass Instanzmember in die Suche einzubeziehen sind.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekStaticGibt an, dass statische Member in die Suche einzubeziehen sind.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekPublicGibt an, dass öffentliche Member in die Suche einzubeziehen sind.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekNonPublicGibt an, dass nicht öffentliche Member in die Suche einzubeziehen sind.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekFlattenHierarchyGibt an, dass öffentliche und geschützte statische Member, die sich in der Hierarchie höher befinden, zurückgegeben werden sollen. Private statische Member in geerbten Klassen werden nicht zurückgegeben. Statische Member sind u. a. Felder, Methoden, Ereignisse und Eigenschaften. Geschachtelte Typen werden nicht zurückgegeben.
Unterstützt von XNA FrameworkInvokeMethodGibt an, dass eine Methode aufgerufen werden soll. Hierbei darf es sich weder um einen Konstruktor noch um einen Typeninitialisierer handeln.
Unterstützt von XNA FrameworkCreateInstanceGibt an, dass eine Instanz des angegebenen Typs durch Reflektion erstellt werden soll. Ruft den Konstruktor auf, der den angegebenen Argumenten entspricht. Der angegebene Membername wird nicht berücksichtigt. Wenn die Art der Suche nicht angegeben ist, gilt (Instance | Public). Es ist nicht möglich, eine Typeninitialisierung aufzurufen.
Unterstützt von XNA FrameworkGetFieldGibt an, dass der Wert des angegebenen Felds zurückgegeben werden soll.
Unterstützt von XNA FrameworkSetFieldGibt an, dass der Wert des angegebenen Felds festgelegt werden muss.
Unterstützt von XNA FrameworkGetPropertyGibt an, dass der Wert der angegebenen Eigenschaft zurückgegeben werden soll.
Unterstützt von XNA FrameworkSetPropertyGibt an, dass der Wert der angegebenen Eigenschaft festgelegt werden muss. Bei COM-Eigenschaften entspricht die Angabe dieses Bindungsflags der Angabe von PutDispProperty und PutRefDispProperty.
Unterstützt von XNA FrameworkPutDispPropertyGibt an, dass der PROPPUT-Member für ein COM-Objekt aufgerufen werden soll. PROPPUT gibt eine property-setting-Funktion an, die einen Wert verwendet. Verwenden Sie PutDispProperty, wenn eine Eigenschaft sowohl über PROPPUT als auch über PROPPUTREF verfügt und Sie unterscheiden müssen, welches dieser beiden aufgerufen wird.
Unterstützt von XNA FrameworkPutRefDispPropertyGibt an, dass der PROPPUTREF-Member für ein COM-Objekt aufgerufen werden soll. PROPPUTREF gibt eine property-setting-Funktion an, die einen Verweis anstelle eines Werts verwendet. Verwenden Sie PutRefDispProperty, wenn eine Eigenschaft sowohl über PROPPUT als auch über PROPPUTREF verfügt und Sie unterscheiden müssen, welches dieser beiden aufgerufen wird.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekExactBindingGibt an, dass die Typen der angegebenen Argumente mit den Typen der entsprechenden formalen Parameter genau übereinstimmen müssen. Bei der Reflektion wird eine Ausnahme ausgelöst, wenn der Aufrufer ein Binder-Objekt bereitstellt, das nicht NULL ist, denn dies setzt voraus, dass der Aufrufer BindToXXX-Implementierungen angibt, mit denen die entsprechende Methode ausgewählt wird.

Die Reflektion bestimmt die Zugriffsregeln des allgemeinen Typsystems. Wenn sich der Aufrufer z. B. in derselben Assembly befindet, sind keine gesonderten Berechtigungen für interne Member erforderlich. Andernfalls benötigt der Aufrufer ReflectionPermission. Dies entspricht der Suche nach Membern, die geschützt, privat usw. sind.

Im Allgemeinen gilt, dass ChangeType nur Erweiterungsumwandlungen durchführen sollte, da bei diesen niemals Daten verloren gehen. Ein Beispiel für eine Erweiterungsumwandlung ist eine Umwandlung einer 32-Bit-Ganzzahl mit Vorzeichen in eine 64-Bit-Ganzzahl mit Vorzeichen. Im Gegensatz dazu können bei einer Eingrenzungsumwandlung Datenverluste auftreten. Ein Beispiel für eine Eingrenzungsumwandlung ist die Umwandlung einer 64-Bit-Ganzzahl mit Vorzeichen in eine 32-Bit-Ganzzahl mit Vorzeichen.

Der Standardbinder ignoriert dieses Flag, während benutzerdefinierte Binder die Semantik dieses Flags implementieren können.

Unterstützt von XNA FrameworkSuppressChangeTypeNicht implementiert.
Unterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekOptionalParamBindingGibt die Gruppe von Membern zurück, deren Parameteranzahl mit der Anzahl bereitgestellter Argumente übereinstimmt. Dieses Bindungsflag wird für Methoden mit Parametern, die Standardwerte besitzen, verwendet wie auch für Methoden mit variablen Argumenten (varargs). Verwenden Sie dieses Flag nur mit Type.InvokeMember.

Parameter mit Standardwerten werden nur bei Aufrufen verwendet, bei denen nachgestellte Argumente ausgelassen werden. Dies müssen die letzten Argumente sein.

Unterstützt von XNA FrameworkIgnoreReturnWird in COM-Interop verwendet, um anzugeben, dass der Rückgabewert des Members ignoriert werden kann.

Diese BindingFlags steuern das Binden einer großen Anzahl von Klassen im System-Namespace, System.Reflection-Namespace und System.Runtime-Namespace, mit denen Member und Typen aufgerufen, erstellt, festgelegt und gesucht werden.

BindingFlags werden in den folgenden Type-Methoden und in anderen Bereichen, z. B. bei MethodBase.Invoke, verwendet:

InvokeMember und GetMethod sind besonders wichtig.

Die Bindungsflags können danach unterschieden werden, wie sie einen Typmember angeben, wie in der folgenden Tabelle dargestellt.

Nach Zugriff

Nach Bindungsargument

Nach Vorgang

DeclaredOnly

FlattenHierarchy

IgnoreCase

IgnoreReturn

Instance

NonPublic

Public

Static

ExactBinding

OptionalParamBinding

CreateInstance

GetField

SetField

GetProperty

SetProperty

InvokeMethod

PutDispProperty

PutRefDispProperty

HinweisHinweis

Sie müssen Instance oder Static zusammen mit Public oder NonPublic angeben. Andernfalls werden keine Member zurückgegeben.

In der folgenden Tabelle werden die von der Standard-Binder.ChangeType durchgeführten Umwandlungen aufgelistet. Diese Tabelle gilt insbesondere für das ExactBinding-Bindungsflag.

Quelltyp

Zieltyp

Beliebiger Typ

Der entsprechende Basistyp.

Beliebiger Typ

Die implementierte Schnittstelle.

Char

UInt16 , UInt32, Int32, UInt64, Int64, Single, Double

Byte

Char , UInt16, Int16, UInt32, Int32, UInt64, Int64, Single, Double

SByte

Int16 , Int32, Int64, Single, Double

UInt16

UInt32 , Int32, UInt64, Int64, Single, Double

Int16

Int32 , Int64, Single, Double

UInt32

UInt64 , Int64, Single, Double

Int32

Int64 , Single, Double

UInt64

Single , Double

Int64

Single , Double

Single

Double

Ohne Verweis

Als Verweis.

Das folgende Beispiel veranschaulicht viele der Bindungsflags.


using System;
using System.Reflection;
using System.IO;

namespace BindingFlagsSnippet
{
    class Example
    {
        static void Main()
        {
            // BindingFlags.InvokeMethod
            // Call a static method.
            Type t = typeof (TestClass);

            Console.WriteLine();
            Console.WriteLine("Invoking a static method.");
            Console.WriteLine("-------------------------");
            t.InvokeMember ("SayHello", BindingFlags.InvokeMethod | BindingFlags.Public | 
                BindingFlags.Static, null, null, new object [] {});

            // BindingFlags.InvokeMethod
            // Call an instance method.
            TestClass c = new TestClass ();
            Console.WriteLine();
            Console.WriteLine("Invoking an instance method.");
            Console.WriteLine("----------------------------");
            c.GetType().InvokeMember ("AddUp", BindingFlags.InvokeMethod, null, c, new object [] {});
            c.GetType().InvokeMember ("AddUp", BindingFlags.InvokeMethod, null, c, new object [] {});

            // BindingFlags.InvokeMethod
            // Call a method with parameters.
            object [] args = new object [] {100.09, 184.45};
            object result;
            Console.WriteLine();
            Console.WriteLine("Invoking a method with parameters.");
            Console.WriteLine("---------------------------------");
            result = t.InvokeMember ("ComputeSum", BindingFlags.InvokeMethod, null, null, args);
            Console.WriteLine ("{0} + {1} = {2}", args[0], args[1], result);

            // BindingFlags.GetField, SetField
            Console.WriteLine();
            Console.WriteLine("Invoking a field (getting and setting.)");
            Console.WriteLine("--------------------------------------");
            // Get a field value.
            result = t.InvokeMember ("Name", BindingFlags.GetField, null, c, new object [] {});
            Console.WriteLine ("Name == {0}", result);
            // Set a field.
            t.InvokeMember ("Name", BindingFlags.SetField, null, c, new object [] {"NewName"});
            result = t.InvokeMember ("Name", BindingFlags.GetField, null, c, new object [] {});
            Console.WriteLine ("Name == {0}", result);

            Console.WriteLine();
            Console.WriteLine("Invoking an indexed property (getting and setting.)");
            Console.WriteLine("--------------------------------------------------");
            // BindingFlags.GetProperty
            // Get an indexed property value.
            int  index = 3;
            result = t.InvokeMember ("Item", BindingFlags.GetProperty, null, c, new object [] {index});
            Console.WriteLine ("Item[{0}] == {1}", index, result);
            // BindingFlags.SetProperty
            // Set an indexed property value.
            index = 3;
            t.InvokeMember ("Item", BindingFlags.SetProperty, null, c, new object [] {index, "NewValue"});
            result = t.InvokeMember ("Item", BindingFlags.GetProperty , null, c, new object [] {index});
            Console.WriteLine ("Item[{0}] == {1}", index, result);

            Console.WriteLine();
            Console.WriteLine("Getting a field or property.");
            Console.WriteLine("----------------------------");
            // BindingFlags.GetField
            // Get a field or property.
            result = t.InvokeMember ("Name", BindingFlags.GetField | BindingFlags.GetProperty, null, c, 
                new object [] {});
            Console.WriteLine ("Name == {0}", result);
            // BindingFlags.GetProperty
            result = t.InvokeMember ("Value", BindingFlags.GetField | BindingFlags.GetProperty, null, c, 
                new object [] {});
            Console.WriteLine ("Value == {0}", result);

            Console.WriteLine();
            Console.WriteLine("Invoking a method with named parameters.");
            Console.WriteLine("---------------------------------------");
            // BindingFlags.InvokeMethod
            // Call a method using named parameters.
            object[] argValues = new object [] {"Mouse", "Micky"};
            String [] argNames = new String [] {"lastName", "firstName"};
            t.InvokeMember ("PrintName", BindingFlags.InvokeMethod, null, null, argValues, null, null, 
                argNames);

            Console.WriteLine();
            Console.WriteLine("Invoking a default member of a type.");
            Console.WriteLine("------------------------------------");
            // BindingFlags.Default
            // Call the default member of a type.
            Type t3 = typeof (TestClass2);
            t3.InvokeMember ("", BindingFlags.InvokeMethod | BindingFlags.Default, null, new TestClass2(), 
                new object [] {});

            // BindingFlags.Static, NonPublic, and Public
            // Invoking a member with ref parameters.
            Console.WriteLine();
            Console.WriteLine("Invoking a method with ref parameters.");
            Console.WriteLine("--------------------------------------");
            MethodInfo m = t.GetMethod("Swap");
            args = new object[2];
            args[0] = 1;
            args[1] = 2;
            m.Invoke(new TestClass(),args);
            Console.WriteLine ("{0}, {1}", args[0], args[1]);

            // BindingFlags.CreateInstance
            // Creating an instance with a parameterless constructor.
            Console.WriteLine();
            Console.WriteLine("Creating an instance with a parameterless constructor.");
            Console.WriteLine("------------------------------------------------------");
            object cobj = t.InvokeMember ("TestClass", BindingFlags.Public |
                BindingFlags.Instance | BindingFlags.CreateInstance,
                null, null, new object [] {});
            Console.WriteLine("Instance of {0} created.", cobj.GetType().Name);

            // Creating an instance with a constructor that has parameters.
            Console.WriteLine();
            Console.WriteLine("Creating an instance with a constructor that has parameters.");
            Console.WriteLine("------------------------------------------------------------");
            cobj = t.InvokeMember ("TestClass", BindingFlags.Public |
                BindingFlags.Instance | BindingFlags.CreateInstance,
                null, null, new object [] { "Hello, World!" });
            Console.WriteLine("Instance of {0} created with initial value '{1}'.", cobj.GetType().Name,
                cobj.GetType().InvokeMember("Name", BindingFlags.GetField, null, cobj, null));

            // BindingFlags.DeclaredOnly
            Console.WriteLine();
            Console.WriteLine("DeclaredOnly instance members.");
            Console.WriteLine("------------------------------");
            System.Reflection.MemberInfo[] memInfo =
                t.GetMembers(BindingFlags.DeclaredOnly | BindingFlags.Instance | 
                BindingFlags.Public);
            for(int i=0;i<memInfo.Length;i++)
            {
                Console.WriteLine(memInfo[i].Name);
            }

            // BindingFlags.IgnoreCase
            Console.WriteLine();
            Console.WriteLine("Using IgnoreCase and invoking the PrintName method.");
            Console.WriteLine("---------------------------------------------------");
            t.InvokeMember("printname", BindingFlags.IgnoreCase | BindingFlags.Static | 
                BindingFlags.Public | BindingFlags.InvokeMethod, null, null, new object[]
                {"Brad","Smith"});

            // BindingFlags.FlattenHierarchy
            Console.WriteLine();
            Console.WriteLine("Using FlattenHierarchy to get inherited static protected and public members." );
            Console.WriteLine("----------------------------------------------------------------------------");
            FieldInfo[] finfos = typeof(MostDerived).GetFields(BindingFlags.NonPublic | BindingFlags.Public |
                  BindingFlags.Static | BindingFlags.FlattenHierarchy);
            foreach (FieldInfo finfo in finfos)
            {
                Console.WriteLine("{0} defined in {1}.", finfo.Name, finfo.DeclaringType.Name);
            }

            Console.WriteLine();
            Console.WriteLine("Without FlattenHierarchy." );
            Console.WriteLine("-------------------------");
            finfos = typeof(MostDerived).GetFields(BindingFlags.NonPublic | BindingFlags.Public |
                  BindingFlags.Static);
            foreach (FieldInfo finfo in finfos)
            {
                Console.WriteLine("{0} defined in {1}.", finfo.Name, finfo.DeclaringType.Name);
            }
        }
    }

    public class TestClass
    {
        public String Name;
        private Object [] values = new Object [] {0, 1,2,3,4,5,6,7,8,9};

        public Object this [int index]
        {
            get
            {
                return values[index];
            }
            set
            {
                values[index] = value;
            }
        }

        public Object Value
        {
            get
            {
                return "the value";
            }
        }

        public TestClass () : this("initialName") {}
        public TestClass (string initName)
        {
            Name = initName;
        }

        int methodCalled = 0;

        public static void SayHello ()
        {
            Console.WriteLine ("Hello");
        }

        public void AddUp ()
        {
            methodCalled++;
            Console.WriteLine ("AddUp Called {0} times", methodCalled);
        }

        public static double ComputeSum (double d1, double d2)
        {
            return d1 + d2;
        }

        public static void PrintName (String firstName, String lastName)
        {
            Console.WriteLine ("{0},{1}", lastName,firstName);
        }

        public void PrintTime ()
        {
            Console.WriteLine (DateTime.Now);
        }

        public void Swap(ref int a, ref int b)
        {
            int x = a;
            a = b;
            b = x;
        }
    }

    [DefaultMemberAttribute ("PrintTime")]
    public class TestClass2
    {
        public void PrintTime ()
        {
            Console.WriteLine (DateTime.Now);
        }
    }

    public class Base
    {
        static int BaseOnlyPrivate = 0;
        protected static int BaseOnly = 0;
    }
    public class Derived : Base
    {
        public static int DerivedOnly = 0;
    }
    public class MostDerived : Derived {}
}

/* This example produces output similar to the following:

Invoking a static method.
-------------------------
Hello

Invoking an instance method.
----------------------------
AddUp Called 1 times
AddUp Called 2 times

Invoking a method with parameters.
---------------------------------
100.09 + 184.45 = 284.54

Invoking a field (getting and setting.)
--------------------------------------
Name == initialName
Name == NewName

Invoking an indexed property (getting and setting.)
--------------------------------------------------
Item[3] == 3
Item[3] == NewValue

Getting a field or property.
----------------------------
Name == NewName
Value == the value

Invoking a method with named parameters.
---------------------------------------
Mouse,Micky

Invoking a default member of a type.
------------------------------------
12/23/2009 4:29:21 PM

Invoking a method with ref parameters.
--------------------------------------
2, 1

Creating an instance with a parameterless constructor.
------------------------------------------------------
Instance of TestClass created.

Creating an instance with a constructor that has parameters.
------------------------------------------------------------
Instance of TestClass created with initial value 'Hello, World!'.

DeclaredOnly instance members.
------------------------------
get_Item
set_Item
get_Value
AddUp
PrintTime
Swap
.ctor
.ctor
Item
Value
Name

Using IgnoreCase and invoking the PrintName method.
---------------------------------------------------
Smith,Brad

Using FlattenHierarchy to get inherited static protected and public members.
----------------------------------------------------------------------------
DerivedOnly defined in Derived.
BaseOnly defined in Base.

Without FlattenHierarchy.
-------------------------

 */


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.