本文整理汇总了C#中System.Reflection.MethodInfo.IsProtected方法的典型用法代码示例。如果您正苦于以下问题:C# MethodInfo.IsProtected方法的具体用法?C# MethodInfo.IsProtected怎么用?C# MethodInfo.IsProtected使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Reflection.MethodInfo
的用法示例。
在下文中一共展示了MethodInfo.IsProtected方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OverrideSpecialName
private void OverrideSpecialName(MethodInfo mi, Dictionary<string, string[]> specialNames, Dictionary<PropertyInfo, PropertyBuilder> overridden) {
if (!mi.IsVirtual || mi.IsFinal) {
// TODO: A better check here would be mi.IsFamily && mi.IsSpecialName. But we need to also check
// the other property method (getter if we're a setter, setter if we're a getter) because if one is protected
// and the other isn't we need to still override both (so our newslot property is also both a getter and a setter).
if ((mi.IsProtected() || mi.IsSpecialName) && (mi.Name.StartsWith("get_") || mi.Name.StartsWith("set_"))) {
// need to be able to call into protected getter/setter methods from derived types,
// even if these methods aren't virtual and we are in partial trust.
specialNames[mi.Name] = new[] { mi.Name };
MethodBuilder mb = CreateSuperCallHelper(mi);
foreach (PropertyInfo pi in mi.DeclaringType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) {
if (pi.GetGetMethod(true).MemberEquals(mi) || pi.GetSetMethod(true).MemberEquals(mi)) {
AddPublicProperty(mi, overridden, mb, pi);
break;
}
}
}
} else if (!TryOverrideProperty(mi, specialNames, overridden)) {
string name;
EventInfo[] eis = mi.DeclaringType.GetEvents(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
foreach (EventInfo ei in eis) {
if (ei.GetAddMethod().MemberEquals(mi)) {
if (NameConverter.TryGetName(DynamicHelpers.GetPythonTypeFromType(mi.DeclaringType), ei, mi, out name) == NameType.None) return;
CreateVTableEventOverride(mi, mi.Name);
return;
} else if (ei.GetRemoveMethod().MemberEquals(mi)) {
if (NameConverter.TryGetName(DynamicHelpers.GetPythonTypeFromType(mi.DeclaringType), ei, mi, out name) == NameType.None) return;
CreateVTableEventOverride(mi, mi.Name);
return;
}
}
OverrideBaseMethod(mi, specialNames);
}
}
示例2: OverrideBaseMethod
private void OverrideBaseMethod(MethodInfo mi, Dictionary<string, string[]> specialNames) {
if ((!mi.IsVirtual || mi.IsFinal) && !mi.IsProtected()) {
return;
}
PythonType basePythonType = GetBaseTypeForMethod(mi);
string name = null;
if (NameConverter.TryGetName(basePythonType, mi, out name) == NameType.None)
return;
if (mi.DeclaringType == typeof(object) && mi.Name == "Finalize") return;
specialNames[mi.Name] = new[] { mi.Name };
if (!mi.IsStatic) {
CreateVTableMethodOverride(mi, name);
}
if (!mi.IsAbstract) {
CreateSuperCallHelper(mi);
}
}
示例3: FilterProtectedGetterOrSetter
private static MethodInfo FilterProtectedGetterOrSetter(MethodInfo info, bool privateBinding) {
if (info != null) {
if (privateBinding || info.IsPublic) {
return info;
}
if (info.IsProtected()) {
return info;
}
}
return null;
}
示例4: OverrideBaseMethod
private void OverrideBaseMethod(MethodInfo mi) {
if ((!mi.IsVirtual || mi.IsFinal) && !mi.IsProtected()) {
return;
}
Type baseType;
if (_baseType == mi.DeclaringType || _baseType.IsSubclassOf(mi.DeclaringType)) {
baseType = _baseType;
} else {
// We must be inherting from an interface
Debug.Assert(mi.DeclaringType.IsInterface);
baseType = mi.DeclaringType;
}
string name = null;
if (!TryGetName(baseType, mi, out name)) return;
if (mi.DeclaringType == typeof(object) && mi.Name == "Finalize") return;
_specialNames.SetSpecialName(mi.Name);
if (!mi.IsStatic) {
CreateVTableMethodOverride(mi, name);
}
if (!mi.IsAbstract) {
CreateSuperCallHelper(mi);
}
}
示例5: OverrideSpecialName
private void OverrideSpecialName(MethodInfo mi, Dictionary<PropertyInfo, PropertyBuilder> overridden) {
if (!mi.IsVirtual || mi.IsFinal) {
if ((mi.IsProtected() || mi.IsSpecialName) && (mi.Name.StartsWith("get_") || mi.Name.StartsWith("set_"))) {
// need to be able to call into protected getter/setter methods from derived types,
// even if these methods aren't virtual and we are in partial trust.
_specialNames.SetSpecialName(mi.Name);
MethodBuilder mb = CreateSuperCallHelper(mi);
foreach (PropertyInfo pi in mi.DeclaringType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) {
if (pi.GetGetMethod(true) == mi || pi.GetSetMethod(true) == mi) {
AddPublicProperty(mi, overridden, mb, pi);
break;
}
}
}
} else if (!TryOverrideProperty(mi, overridden)) {
EventInfo[] eis = mi.DeclaringType.GetEvents(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
foreach (EventInfo ei in eis) {
if (ei.GetAddMethod() == mi) {
CreateVTableMethodOverride(mi, mi.Name);
return;
} else if (ei.GetRemoveMethod() == mi) {
CreateVTableMethodOverride(mi, mi.Name);
return;
}
}
OverrideBaseMethod(mi);
}
}
示例6: ConsiderMethod
static void ConsiderMethod(MethodInfo m, Dictionary<IPersistentVector, IList<MethodInfo>> mm)
{
IPersistentVector mk = MSig(m);
if (!(mm.ContainsKey(mk)
|| !(m.IsPublic || m.IsProtected())
|| m.IsStatic
|| m.IsFinal))
AddMethod(mm, mk, m);
}