本文整理汇总了C#中MemberBinder.GetMember方法的典型用法代码示例。如果您正苦于以下问题:C# MemberBinder.GetMember方法的具体用法?C# MemberBinder.GetMember怎么用?C# MemberBinder.GetMember使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MemberBinder
的用法示例。
在下文中一共展示了MemberBinder.GetMember方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DirResolver
private static MemberGroup/*!*/ DirResolver(MemberBinder/*!*/ binder, Type/*!*/ type) {
return binder.GetMember(type, "GetMemberNames");
}
示例2: ResolveMember
public override MemberGroup/*!*/ ResolveMember(MemberBinder/*!*/ binder, OldDynamicAction/*!*/ action, Type/*!*/ type, string/*!*/ name) {
if (type.IsSealed && type.IsAbstract) {
// static types don't have PythonOperationKind
return MemberGroup.EmptyGroup;
}
// try mapping __*__ methods to .NET method names
PythonOperationKind opMap;
EnsureOperatorTable();
if (_pythonOperatorTable.TryGetValue(name, out opMap)) {
if (IncludeOperatorMethod(type, opMap)) {
OperatorMapping opInfo;
if (IsReverseOperator(opMap)) {
opInfo = OperatorMapping.GetOperatorMapping(opMap & ~PythonOperationKind.Reversed);
} else {
opInfo = OperatorMapping.GetOperatorMapping(opMap);
}
if (opInfo != null) {
foreach (Type curType in binder.GetContributingTypes(type)) {
if (curType == typeof(BigInteger) &&
(opInfo.Operator == PythonOperationKind.Mod ||
opInfo.Operator == PythonOperationKind.RightShift ||
opInfo.Operator == PythonOperationKind.LeftShift ||
opInfo.Operator == PythonOperationKind.Compare ||
opInfo.Operator == PythonOperationKind.Divide)) {
// we override these with our own modulus/power PythonOperationKind which are different from BigInteger.
continue;
}
Debug.Assert(opInfo.Name != "Equals");
MemberGroup res = GetBaseHelperOverloads(type, opInfo.Name, binder.GetMember(curType, opInfo.Name));
if (res.Count == 0 && opInfo.AlternateName != null) {
res = binder.GetMember(curType, opInfo.AlternateName);
if (opInfo.AlternateName == "Equals") {
// "Equals" is available as an alternate method name. Because it's also on object and Python
// doesn't define it on object we need to filter it out.
res = FilterObjectEquality(res);
} else {
res = GetBaseHelperOverloads(type, opInfo.AlternateName, res);
}
}
if (res.Count > 0) {
return FilterForwardReverseMethods(name, res, type, opMap);
}
}
}
}
}
if (name == "__call__") {
MemberGroup res = binder.GetMember(type, "Call");
if (res.Count > 0) {
return res;
}
}
return MemberGroup.EmptyGroup;
}
示例3: FallbackInequalityResolver
/// <summary>
/// Looks for an Equals overload defined on the type and if one is present binds __ne__ to an
/// InstanceOps helper.
/// </summary>
private static MemberGroup/*!*/ FallbackInequalityResolver(MemberBinder/*!*/ binder, Type/*!*/ type) {
// if object defines __eq__ then we can call the reverse version
if (IncludeOperatorMethod(type, PythonOperationKind.NotEqual)) {
foreach (Type curType in binder.GetContributingTypes(type)) {
MemberGroup mg = binder.GetMember(curType, "Equals");
foreach (MemberTracker mt in mg) {
if (mt.MemberType != TrackerTypes.Method || mt.DeclaringType == typeof(object)) {
continue;
}
MethodTracker method = (MethodTracker)mt;
if ((method.Method.Attributes & MethodAttributes.NewSlot) != 0) {
continue;
}
ParameterInfo[] pis = method.Method.GetParameters();
if (pis.Length == 1) {
if (pis[0].ParameterType == typeof(object)) {
return new MemberGroup(MethodTracker.FromMemberInfo(typeof(InstanceOps).GetMethod("NotEqualsMethod"), curType));
}
}
}
}
}
return MemberGroup.EmptyGroup;
}
示例4: Resolver
public MemberGroup/*!*/ Resolver(MemberBinder/*!*/ binder, Type/*!*/ type) {
if (type.IsSealed && type.IsAbstract) {
// static types don't have PythonOperationKind
return MemberGroup.EmptyGroup;
}
foreach (Type t in binder.GetContributingTypes(type)) {
if (t == typeof(BigInteger)) continue;
MemberGroup res = binder.GetMember(t, "op_Power");
if (res.Count > 0) {
return FilterForwardReverseMethods(_pythonName, res, type, _op);
}
res = binder.GetMember(t, "Power");
if (res.Count > 0) {
return FilterForwardReverseMethods(_pythonName, res, type, _op);
}
}
return MemberGroup.EmptyGroup;
}
示例5: DirResolver
private static MemberGroup/*!*/ DirResolver(MemberBinder/*!*/ binder, Type/*!*/ type) {
MemberGroup res = binder.GetMember(type, "GetMemberNames");
if (res == MemberGroup.EmptyGroup &&
!typeof(IPythonObject).IsAssignableFrom(type) &&
typeof(IDynamicMetaObjectProvider).IsAssignableFrom(type)) {
res = GetInstanceOpsMethod(type, "DynamicDir");
}
return res;
}
示例6: Resolver
public MemberGroup/*!*/ Resolver(MemberBinder/*!*/ binder, Type/*!*/ type) {
if (type.IsSealed() && type.IsAbstract()) {
// static types don't have PythonOperationKind
return MemberGroup.EmptyGroup;
}
foreach (Type t in binder.GetContributingTypes(type)) {
MemberGroup res = binder.GetMember(t, _methodName);
if (res.Count > 0) {
return FilterForwardReverseMethods(_pythonName, res, type, _op);
}
}
return MemberGroup.EmptyGroup;
}
示例7: DirResolver
private static MemberGroup/*!*/ DirResolver(MemberBinder/*!*/ binder, Type/*!*/ type) {
if (type.GetTypeInfo().IsDefined(typeof(DontMapGetMemberNamesToDirAttribute), true)) {
return MemberGroup.EmptyGroup;
}
MemberGroup res = binder.GetMember(type, "GetMemberNames");
if (res == MemberGroup.EmptyGroup &&
!typeof(IPythonObject).IsAssignableFrom(type) &&
typeof(IDynamicMetaObjectProvider).IsAssignableFrom(type)) {
res = GetInstanceOpsMethod(type, "DynamicDir");
}
return res;
}