2014-02-19 10 views
6

Ich erinnere mich irgendwo lesen, wenn die Verwendung von Reflexion und die Überlast von GetMethod, die eine Bitmaske von BindingFlags akzeptiert, dass BindingFlags.Default entspricht BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance oder etwas. Kann mir jemand sagen, welche Werte speziell in BindingFlags.Default enthalten sind? Die MSDN documentation sagt nicht, und ich kann die Antwort nirgendwo finden.Was entspricht BindingFlags.Default?

Antwort

6

Wenn Sie nach Definition gehen "auf sie, werden Sie sehen:

public enum BindingFlags 
{ 
    // Summary: 
    //  Specifies no binding flag. 
    Default = 0, 
    // 
    // Summary: 
    //  Specifies that the case of the member name should not be considered when 
    //  binding. 
    IgnoreCase = 1, 
    // 
    // Summary: 
    //  Specifies that only members declared at the level of the supplied type's 
    //  hierarchy should be considered. Inherited members are not considered. 
    DeclaredOnly = 2, 
    // 
    // Summary: 
    //  Specifies that instance members are to be included in the search. 
    Instance = 4, 
    // 
    // Summary: 
    //  Specifies that static members are to be included in the search. 
    Static = 8, 
    // 
    // Summary: 
    //  Specifies that public members are to be included in the search. 
    Public = 16, 
    // 
    // Summary: 
    //  Specifies that non-public members are to be included in the search. 
    NonPublic = 32, 
    // 
    // Summary: 
    //  Specifies that public and protected static members up the hierarchy should 
    //  be returned. Private static members in inherited classes are not returned. 
    //  Static members include fields, methods, events, and properties. Nested types 
    //  are not returned. 
    FlattenHierarchy = 64, 
    // 
    // Summary: 
    //  Specifies that a method is to be invoked. This must not be a constructor 
    //  or a type initializer. 
    InvokeMethod = 256, 
    // 
    // Summary: 
    //  Specifies that Reflection should create an instance of the specified type. 
    //  Calls the constructor that matches the given arguments. The supplied member 
    //  name is ignored. If the type of lookup is not specified, (Instance | Public) 
    //  will apply. It is not possible to call a type initializer. 
    CreateInstance = 512, 
    // 
    // Summary: 
    //  Specifies that the value of the specified field should be returned. 
    GetField = 1024, 
    // 
    // Summary: 
    //  Specifies that the value of the specified field should be set. 
    SetField = 2048, 
    // 
    // Summary: 
    //  Specifies that the value of the specified property should be returned. 
    GetProperty = 4096, 
    // 
    // Summary: 
    //  Specifies that the value of the specified property should be set. For COM 
    //  properties, specifying this binding flag is equivalent to specifying PutDispProperty 
    //  and PutRefDispProperty. 
    SetProperty = 8192, 
    // 
    // Summary: 
    //  Specifies that the PROPPUT member on a COM object should be invoked. PROPPUT 
    //  specifies a property-setting function that uses a value. Use PutDispProperty 
    //  if a property has both PROPPUT and PROPPUTREF and you need to distinguish 
    //  which one is called. 
    PutDispProperty = 16384, 
    // 
    // Summary: 
    //  Specifies that the PROPPUTREF member on a COM object should be invoked. PROPPUTREF 
    //  specifies a property-setting function that uses a reference instead of a 
    //  value. Use PutRefDispProperty if a property has both PROPPUT and PROPPUTREF 
    //  and you need to distinguish which one is called. 
    PutRefDispProperty = 32768, 
    // 
    // Summary: 
    //  Specifies that types of the supplied arguments must exactly match the types 
    //  of the corresponding formal parameters. Reflection throws an exception if 
    //  the caller supplies a non-null Binder object, since that implies that the 
    //  caller is supplying BindToXXX implementations that will pick the appropriate 
    //  method. 
    ExactBinding = 65536, 
    // 
    // Summary: 
    //  Not implemented. 
    SuppressChangeType = 131072, 
    // 
    // Summary: 
    //  Returns the set of members whose parameter count matches the number of supplied 
    //  arguments. This binding flag is used for methods with parameters that have 
    //  default values and methods with variable arguments (varargs). This flag should 
    //  only be used with System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]). 
    OptionalParamBinding = 262144, 
    // 
    // Summary: 
    //  Used in COM interop to specify that the return value of the member can be 
    //  ignored. 
    IgnoreReturn = 16777216, 
} 

Also, es sieht aus wie BindingFlags.Default != BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance.

+0

Derp, ich dachte nicht daran, das zu tun. –

+0

@ davidkennedy85 :) – MadSkunk

+0

Ich ging zu der Definition der Klasse und las das, wie hast du herausgefunden, was 'Default' äquivalent zu tho ist? – Fred

1

BindingFlags.Default gibt keine Bindungsflags an. Es ist Aufgabe des Benutzers der Aufzählung, zu wählen, was zu tun ist. System.Type.GetMethods() zum Beispiel gibt alle öffentlichen Methoden zurück.