Что такое 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.По умолчанию флаги привязки отсутствуют. Это зависит от пользователя перечисления, чтобы выбрать, что делать. возвращает все открытые методы.