BindingFlags Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje příznaky, které řídí vazbu a způsob, jakým vyhledávání členů a typů provádí reflexe.
Tento výčet podporuje bitové kombinace hodnot jeho členů.
public enum class BindingFlags
[System.Flags]
public enum BindingFlags
[System.Flags]
[System.Serializable]
public enum BindingFlags
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum BindingFlags
[<System.Flags>]
type BindingFlags =
[<System.Flags>]
[<System.Serializable>]
type BindingFlags =
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type BindingFlags =
Public Enum BindingFlags
- Dědičnost
- Atributy
Pole
| Name | Hodnota | Description |
|---|---|---|
| Default | 0 | Určuje, že nejsou definovány žádné příznaky vazby. |
| IgnoreCase | 1 | Určuje, že při vazbě by se nemělo brát v úvahu případ názvu člena. |
| DeclaredOnly | 2 | Určuje, že je třeba zvážit pouze členy deklarované na úrovni zadané hierarchie typu. Zděděné členy se nepovažují. |
| Instance | 4 | Určuje, že členové instance mají být zahrnuti do vyhledávání. |
| Static | 8 | Určuje, že statické členy mají být zahrnuty do vyhledávání. |
| Public | 16 | Určuje, že veřejné členy mají být zahrnuty do hledání. |
| NonPublic | 32 | Určuje, že do vyhledávání budou zahrnuti neveřejní členové. |
| FlattenHierarchy | 64 | Určuje, že veřejné a chráněné statické členy v hierarchii by se měly vrátit. Privátní statické členy v zděděných třídách se nevrátí. Statické členy zahrnují pole, metody, události a vlastnosti. Vnořené typy se nevrátí. |
| InvokeMethod | 256 | Určuje, že metoda má být vyvolána. Nesmí to být konstruktor ani inicializátor typu. Tento příznak se předá |
| CreateInstance | 512 | Určuje, že reflexe by měla vytvořit instanci zadaného typu. Volá konstruktor, který odpovídá zadaným argumentů. Zadaný název členu se ignoruje. Pokud typ vyhledávání není zadaný, (Instance | Veřejné) se použije. Inicializátor typu není možné volat. Tento příznak se předá |
| GetField | 1024 | Určuje, že má být vrácena hodnota zadaného pole. Tento příznak se předá |
| SetField | 2048 | Určuje, že má být nastavena hodnota zadaného pole. Tento příznak se předá |
| GetProperty | 4096 | Určuje, že hodnota zadané vlastnosti by měla být vrácena. Tento příznak se předá |
| SetProperty | 8192 | Určuje, že hodnota zadané vlastnosti by měla být nastavena. Pro vlastnosti modelu COM je zadání tohoto příznaku vazby ekvivalentní k určení Tento příznak se předá |
| PutDispProperty | 16384 | Určuje, že člen |
| PutRefDispProperty | 32768 | Určuje, že člen |
| ExactBinding | 65536 | Určuje, že typy zadaných argumentů musí přesně odpovídat typům odpovídajících formálních parametrů. Reflexe vyvolá výjimku, pokud volající poskytuje objekt, který není null |
| SuppressChangeType | 131072 | Není implementováno. |
| OptionalParamBinding | 262144 | Vrátí sadu členů, jejichž počet parametrů odpovídá počtu zadaných argumentů. Tento příznak vazby se používá pro metody s parametry, které mají výchozí hodnoty a metody s proměnnými argumenty (varargs). Tento příznak by měl být použit pouze s InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). |
| IgnoreReturn | 16777216 | Používá se v zprostředkovatele komunikace modelu COM k určení, že návratová hodnota člena může být ignorována. |
| DoNotWrapExceptions | 33554432 | Určuje, že výjimky by neměly být zabaleny do .TargetInvocationException |
Příklady
Následující příklad ukazuje mnoho příznaků vazby.
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.
-------------------------
*/
Imports System.Reflection
Imports System.IO
Class Invoke
Public Shared Sub Main()
' BindingFlags.InvokeMethod
' Call a static method.
Dim t As Type = GetType(TestClass)
Console.WriteLine()
Console.WriteLine("Invoking a static method.")
Console.WriteLine("-------------------------")
t.InvokeMember("SayHello", BindingFlags.InvokeMethod Or BindingFlags.Public _
Or BindingFlags.Static, Nothing, Nothing, New Object() {})
' BindingFlags.InvokeMethod
' Call an instance method.
Dim c As New TestClass()
Console.WriteLine()
Console.WriteLine("Invoking an instance method.")
Console.WriteLine("----------------------------")
c.GetType().InvokeMember("AddUp", BindingFlags.InvokeMethod, Nothing, c, New Object() {})
c.GetType().InvokeMember("AddUp", BindingFlags.InvokeMethod, Nothing, c, New Object() {})
' BindingFlags.InvokeMethod
' Call a method with parameters.
Dim args() As Object = {100.09, 184.45}
Dim result As Object
Console.WriteLine()
Console.WriteLine("Invoking a method with parameters.")
Console.WriteLine("---------------------------------")
result = t.InvokeMember("ComputeSum", BindingFlags.InvokeMethod, Nothing, Nothing, 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, Nothing, c, New Object() {})
Console.WriteLine("Name == {0}", result)
' Set a field.
t.InvokeMember("Name", BindingFlags.SetField, Nothing, c, New Object() {"NewName"})
result = t.InvokeMember("Name", BindingFlags.GetField, Nothing, 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.
Dim index As Integer = 3
result = t.InvokeMember("Item", BindingFlags.GetProperty, Nothing, 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, Nothing, c, New Object() {index, "NewValue"})
result = t.InvokeMember("Item", BindingFlags.GetProperty, Nothing, 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 Or BindingFlags.GetProperty, Nothing, _
c, New Object() {})
Console.WriteLine("Name == {0}", result)
' BindingFlags.GetProperty
result = t.InvokeMember("Value", BindingFlags.GetField Or BindingFlags.GetProperty, Nothing, _
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.
Dim argValues() As Object = {"Mouse", "Micky"}
Dim argNames() As [String] = {"lastName", "firstName"}
t.InvokeMember("PrintName", BindingFlags.InvokeMethod, Nothing, Nothing, argValues, Nothing, _
Nothing, argNames)
Console.WriteLine()
Console.WriteLine("Invoking a default member of a type.")
Console.WriteLine("------------------------------------")
' BindingFlags.Default
' Call the default member of a type.
Dim t3 As Type = GetType(TestClass2)
t3.InvokeMember("", BindingFlags.InvokeMethod Or BindingFlags.Default, Nothing, _
New TestClass2(), New Object() {})
Console.WriteLine()
Console.WriteLine("Invoking a method with ByRef parameters.")
Console.WriteLine("----------------------------------------")
' BindingFlags.Static, NonPublic, and Public
' Invoking a member by reference.
Dim m As MethodInfo = t.GetMethod("Swap")
args = New Object(1) {}
args(0) = 1
args(1) = 2
m.Invoke(New TestClass(), args)
Console.WriteLine("{0}, {1}", args(0), args(1))
' BindingFlags.CreateInstance
' Creating an instance.
Console.WriteLine()
Console.WriteLine("Creating an instance with parameterless constructor.")
Console.WriteLine("----------------------------------------------------")
Dim obj As Object = GetType(TestClass).InvokeMember("TestClass", BindingFlags.CreateInstance, _
Nothing, Nothing, New Object() {})
Console.WriteLine("Instance of {0} created.", obj.GetType().Name)
Console.WriteLine()
Console.WriteLine("Creating an instance with a constructor that has parameters.")
Console.WriteLine("------------------------------------------------------------")
obj = GetType(TestClass).InvokeMember("TestClass", BindingFlags.CreateInstance, Nothing, _
Nothing, New Object() { "Hello, World!" })
Console.WriteLine("Instance of {0} created with initial value '{1}'.", obj.GetType().Name, _
obj.GetType().InvokeMember("Name", BindingFlags.GetField, Nothing, obj, Nothing))
' BindingFlags.DeclaredOnly
Console.WriteLine()
Console.WriteLine("DeclaredOnly instance members.")
Console.WriteLine("------------------------------")
Dim memInfo As System.Reflection.MemberInfo() = t.GetMembers(BindingFlags.DeclaredOnly Or _
BindingFlags.Public Or BindingFlags.Instance)
Dim i As Integer
For i = 0 To memInfo.Length - 1
Console.WriteLine(memInfo(i).Name)
Next i
' BindingFlags.IgnoreCase
Console.WriteLine()
Console.WriteLine("Using IgnoreCase and invoking the PrintName method.")
Console.WriteLine("---------------------------------------------------")
t.InvokeMember("printname", BindingFlags.IgnoreCase Or BindingFlags.Public Or _
BindingFlags.Static Or BindingFlags.InvokeMethod, Nothing, Nothing, _
New Object() {"Brad", "Smith"})
' BindingFlags.FlattenHierarchy
Console.WriteLine()
Console.WriteLine("Using FlattenHierarchy to get inherited static protected and public members." )
Console.WriteLine("----------------------------------------------------------------------------")
Dim finfos() As FieldInfo = GetType(MostDerived).GetFields(BindingFlags.NonPublic Or _
BindingFlags.Public Or BindingFlags.Static Or BindingFlags.FlattenHierarchy)
For Each finfo As FieldInfo In finfos
Console.WriteLine("{0} defined in {1}.", finfo.Name, finfo.DeclaringType.Name)
Next
Console.WriteLine()
Console.WriteLine("Without FlattenHierarchy." )
Console.WriteLine("-------------------------")
finfos = GetType(MostDerived).GetFields(BindingFlags.NonPublic Or BindingFlags.Public Or _
BindingFlags.Static)
For Each finfo As FieldInfo In finfos
Console.WriteLine("{0} defined in {1}.", finfo.Name, finfo.DeclaringType.Name)
Next
End Sub
End Class
Public Class TestClass
Public Name As String
Private values() As [Object] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Default Public Property Item(ByVal index As Integer) As [Object]
Get
Return values(index)
End Get
Set(ByVal Value As [Object])
values(index) = Value
End Set
End Property
Public ReadOnly Property Value() As [Object]
Get
Return "the value"
End Get
End Property
Public Sub New(ByVal initName As String)
Name = initName
End Sub
Public Sub New()
MyClass.New("initialName")
End Sub
Private methodCalled As Integer = 0
Public Shared Sub SayHello()
Console.WriteLine("Hello")
End Sub
Public Sub AddUp()
methodCalled += 1
Console.WriteLine("AddUp Called {0} times", methodCalled)
End Sub
Public Shared Function ComputeSum(ByVal d1 As Double, ByVal d2 As Double) As Double
Return d1 + d2
End Function
Public Shared Sub PrintName(ByVal firstName As [String], ByVal lastName As [String])
Console.WriteLine("{0},{1}", lastName, firstName)
End Sub
Public Sub PrintTime()
Console.WriteLine(DateTime.Now)
End Sub
Public Sub Swap(ByRef a As Integer, ByRef b As Integer)
Dim x As Integer = a
a = b
b = x
End Sub
End Class
<DefaultMemberAttribute("PrintTime")> _
Public Class TestClass2
Public Sub PrintTime()
Console.WriteLine(DateTime.Now)
End Sub
End Class
Public Class Base
Shared BaseOnlyPrivate As Integer = 0
Protected Shared BaseOnly As Integer = 0
End Class
Public Class Derived
Inherits Base
Public Shared DerivedOnly As Integer = 0
End Class
Public Class MostDerived
Inherits Derived
End Class
' 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:34:22 PM
'
'Invoking a method with ByRef parameters.
'----------------------------------------
'2, 1
'
'Creating an instance with 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.
'-------------------------
'
Poznámky
Tyto BindingFlags řídicí vazby pro velké množství tříd v System, System.Reflectiona System.Runtime obory názvů, které vyvolat, vytvořit, získat, nastavit a najít členy a typy.
BindingFlags se používají v následujících Type metodách a dalších místech, například MethodBase.Invoke:
InvokeMember a GetMethod jsou obzvláště důležité.
Příznaky vazeb lze kategorizovat podle toho, jak identifikují člena typu, jak je uvedeno v následující tabulce.
| Identifikovaná přístupností | Identifikováno pomocí argumentu vazby | Identifikovaný operací |
|---|---|---|
| DeclaredOnly FlattenHierarchy Ignorovat případ IgnoreReturn Instance Nonpublic Veřejné Static |
Přesná vazba OptionalParamBinding |
VytvořitInstanci Getfield Setfield GetProperty SetProperty InvokeMethod PutDispProperty PutRefDispProperty |
Note
Je nutné zadat Instance nebo Static spolu s Public členy nebo NonPublic nebude vrácen žádný člen.
Následující tabulka uvádí převody provedené ve výchozím nastavení Binder.ChangeType. Tato tabulka platí zejména pro BindingFlags.ExactBinding příznak vazby. Obecný princip je, že ChangeType by měl provádět pouze rozšiřující převody, které nikdy neztratí data. Příkladem rozšiřujícího převodu je vynucení hodnoty, která je 32bitové celé číslo podepsané na hodnotu, která je 64bitové celé číslo se signedm. Liší se od zužujícího převodu, který může ztratit data. Příkladem zužujícího převodu je vynucení 64bitového celého čísla podepsaného na 32bitové celé číslo se signedm.
| Typ zdroje | Typ cíle |
|---|---|
| Libovolný typ | Základní typ. |
| Libovolný typ | Rozhraní, které implementuje. |
Char |
UInt16, UInt32, Int32, UInt64, Int64, , SingleDouble |
Byte |
Char, UInt16, , UInt32UInt64Int64Int16Int32, , SingleDouble |
SByte |
Int16, Int32, Int64, , SingleDouble |
UInt16 |
UInt32, Int32, UInt64, Int64, , SingleDouble |
Int16 |
Int32, Int64, , SingleDouble |
UInt32 |
UInt64, Int64, , SingleDouble |
Int32 |
Int64, , SingleDouble |
UInt64 |
Single, Double |
Int64 |
Single, Double |
Single |
Double |
| Odkazy na | Podle odkazu. |
Při použití příznaku BindingFlags.ExactBinding vazby modeluje reflexe pravidla přístupnosti společného systému typů. Pokud je například volající ve stejném sestavení, volající nepotřebuje zvláštní oprávnění pro interní členy. Jinak volající potřebuje ReflectionPermission. To je konzistentní s vyhledáváním členů, které jsou chráněny, soukromé atd.