本文整理汇总了C#中MemberRequestKind类的典型用法代码示例。如果您正苦于以下问题:C# MemberRequestKind类的具体用法?C# MemberRequestKind怎么用?C# MemberRequestKind使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
MemberRequestKind类属于命名空间,在下文中一共展示了MemberRequestKind类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetMember
public override MemberGroup GetMember(MemberRequestKind actionKind, Type type, string name) {
var res = base.GetMember(actionKind, type, name);
if (res.Count == 0) {
List<MemberTracker> trackers = new List<MemberTracker>();
foreach (var method in _extMethodSet.GetExtensionMethods(name)) {
var parameters = method.GetParameters();
if (parameters.Length == 0) {
continue;
}
var paramType = parameters[0].ParameterType;
if (IsApplicableExtensionMethod(type, paramType)) {
trackers.Add(MemberTracker.FromMemberInfo(method, paramType));
}
}
if (trackers.Count > 0) {
return new MemberGroup(trackers.ToArray());
}
}
return res;
}
示例2: GetCandidateNames
protected override IEnumerable<string/*!*/>/*!*/ GetCandidateNames(MemberBinder/*!*/ binder, MemberRequestKind/*!*/ action, Type/*!*/ type) {
return _helperMap.Keys;
}
示例3: ResolveMember
public override MemberGroup/*!*/ ResolveMember(MemberBinder/*!*/ binder, MemberRequestKind/*!*/ action, Type/*!*/ type, string/*!*/ name) {
Assert.NotNull(binder, action, type, name);
// Do not map IComparable if this is a primitive builtin type.
if (_excludePrimitiveTypes) {
if (type.IsPrimitive() || type == typeof(BigInteger) ||
type == typeof(string) || type == typeof(decimal)) {
return MemberGroup.EmptyGroup;
}
}
string helperName;
if (_helperMap.TryGetValue(name, out helperName) &&
_comparable.IsAssignableFrom(type)) {
return new MemberGroup(GetEqualityMethods(type, helperName));
}
return MemberGroup.EmptyGroup;
}
示例4: GetMember
/// <summary>
/// Gets the members that are visible from the provided type of the specified name.
///
/// The default implemetnation first searches the type, then the flattened heirachy of the type, and then
/// registered extension methods.
/// </summary>
public virtual MemberGroup GetMember(MemberRequestKind action, Type type, string name) {
IEnumerable<MemberInfo> foundMembers = type.GetInheritedMembers(name);
if (!PrivateBinding) {
foundMembers = CompilerHelpers.FilterNonVisibleMembers(type, foundMembers);
}
MemberGroup members = new MemberGroup(foundMembers.ToArray());
// check for generic types w/ arity...
string genName = name + ReflectionUtils.GenericArityDelimiter;
List<TypeInfo> genTypes = null;
foreach (TypeInfo t in type.GetDeclaredNestedTypes()) {
if (t.IsPublic && t.Name.StartsWith(genName)) {
if (genTypes == null) {
genTypes = new List<TypeInfo>();
}
genTypes.Add(t);
}
}
if (genTypes != null) {
List<MemberTracker> mt = new List<MemberTracker>(members);
foreach (TypeInfo t in genTypes) {
mt.Add(MemberTracker.FromMemberInfo(t));
}
return MemberGroup.CreateInternal(mt.ToArray());
}
if (members.Count == 0) {
members = new MemberGroup(
type.GetInheritedMembers(name, flattenHierarchy: true).WithBindingFlags(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance).ToArray()
);
if (members.Count == 0) {
members = GetAllExtensionMembers(type, name);
}
}
return members;
}
示例5: GetMember
/// <summary>
/// Gets the statically known member from the type with the specific name. Searches only the specified type to find the member.
/// </summary>
public static MemberGroup/*!*/ GetMember(PythonBinder/*!*/ binder, MemberRequestKind/*!*/ action, Type/*!*/ type, string/*!*/ name) {
Assert.NotNull(binder, action, type, name);
PerfTrack.NoteEvent(PerfTrack.Categories.ReflectedTypes, String.Format("LookupMember: {0} {1}", type.Name, name));
return GetMemberGroup(new LookupBinder(binder), action, type, name);
}
示例6: FilterSpecialNames
private static MemberGroup/*!*/ FilterSpecialNames(MemberGroup/*!*/ group, string/*!*/ name, MemberRequestKind/*!*/ action) {
Assert.NotNull(group, name, action);
bool filter = true;
if (action == MemberRequestKind.Invoke ||
action == MemberRequestKind.Convert ||
action == MemberRequestKind.Operation) {
filter = false;
}
if (!IsPythonRecognizedOperator(name)) {
filter = false;
}
List<MemberTracker> mts = null;
for (int i = 0; i < group.Count; i++) {
MemberTracker mt = group[i];
bool skip = false;
if (mt.MemberType == TrackerTypes.Method) {
MethodTracker meth = (MethodTracker)mt;
if (meth.Method.IsSpecialName && mt.Name != "op_Implicit" && mt.Name != "op_Explicit") {
if (!IsPropertyWithParameters(meth)) {
skip = true;
}
}
if (meth.Method.IsDefined(typeof(ClassMethodAttribute), true)) {
return new MemberGroup(new ClassMethodTracker(group));
}
} else if (mt.MemberType == TrackerTypes.Property) {
PropertyTracker pt = (PropertyTracker)mt;
if (name == pt.Name && pt.GetIndexParameters().Length > 0 && IsPropertyDefaultMember(pt)) {
// exposed via __*item__, not the property name
skip = true;
}
} else if (mt.MemberType == TrackerTypes.Field) {
FieldInfo fi = ((FieldTracker)mt).Field;
if (fi.IsDefined(typeof(SlotFieldAttribute), false)) {
if (mts == null) {
mts = MakeListWithPreviousMembers(group, mts, i);
mt = new CustomAttributeTracker(mt.DeclaringType, mt.Name, (PythonTypeSlot)fi.GetValue(null));
}
}
}
if (skip && filter) {
if (mts == null) {
// add any ones we skipped...
mts = MakeListWithPreviousMembers(group, mts, i);
}
} else if (mts != null) {
mts.Add(mt);
}
}
if (mts != null) {
if (mts.Count == 0) {
return MemberGroup.EmptyGroup;
}
return new MemberGroup(mts.ToArray());
}
return group;
}
示例7: GetResolvedMembers
/// <summary>
/// Primary worker for returning a list of all members in a type. Can be called with different MemberBinder's to alter the scope
/// of the search.
/// </summary>
private static IList<ResolvedMember/*!*/>/*!*/ GetResolvedMembers(MemberBinder/*!*/ memberBinder, MemberRequestKind/*!*/ action, Type/*!*/ type) {
List<ResolvedMember> res = new List<ResolvedMember>();
foreach (MemberResolver resolver in _resolvers) {
res.AddRange(resolver.ResolveMembers(memberBinder, action, type));
}
return res;
}
示例8: ResolveMembers
/// <summary>
/// Returns a list of members that exist on the type. The ResolvedMember structure indicates both
/// the name and provides the MemberGroup.
/// </summary>
public IList<ResolvedMember/*!*/>/*!*/ ResolveMembers(MemberBinder/*!*/ binder, MemberRequestKind/*!*/ action, Type/*!*/ type) {
Dictionary<string, ResolvedMember> members = new Dictionary<string, ResolvedMember>();
foreach (string name in GetCandidateNames(binder, action, type)) {
if (members.ContainsKey(name)) {
continue;
}
MemberGroup member = ResolveMember(binder, action, type, name);
if (member.Count > 0) {
members[name] = new ResolvedMember(name, member);
}
}
ResolvedMember[] res = new ResolvedMember[members.Count];
members.Values.CopyTo(res, 0);
return res;
}
示例9: GetMemberGroup
/// <summary>
/// Primary worker for getting the member(s) associated with a single name. Can be called with different MemberBinder's to alter the
/// scope of the search.
/// </summary>
private static MemberGroup/*!*/ GetMemberGroup(MemberBinder/*!*/ memberBinder, MemberRequestKind/*!*/ action, Type/*!*/ type, string/*!*/ name) {
foreach (MemberResolver resolver in _resolvers) {
MemberGroup/*!*/ group = resolver.ResolveMember(memberBinder, action, type, name);
if (group.Count > 0) {
return group;
}
}
return MemberGroup.EmptyGroup;
}
示例10: GetMembers
/// <summary>
/// Gets all the statically known members from the specified type. Searches only the specified type to find the members.
///
/// The result may include multiple resolution. It is the callers responsibility to only treat the 1st one by name as existing.
/// </summary>
public static IList<ResolvedMember/*!*/>/*!*/ GetMembers(PythonBinder/*!*/ binder, MemberRequestKind/*!*/ action, Type/*!*/ type) {
Assert.NotNull(binder, action, type);
return GetResolvedMembers(new LookupBinder(binder), action, type);
}