Что такое BindingFlags.Эквивалент по умолчанию?

Я помню, что где-то читал, когда использовал отражение и перегрузку GetMethod который принимает битовую маску BindingFlags, что BindingFlags.Default эквивалентно BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance или что-то в этом роде. Может кто-нибудь сказать мне, какие ценности включены в BindingFlags.Default? The документация MSDN не говорит,и я нигде не могу найти ответ.

2 ответов


Если вы 'перейти к определению' на нее, вы увидите:

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,
}

Итак, похоже на BindingFlags.Default != BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance.


BindingFlags.По умолчанию флаги привязки отсутствуют. Это зависит от пользователя перечисления, чтобы выбрать, что делать. возвращает все открытые методы.