本文整理汇总了C#中Mono.CSharp.TypeContainer.ResolveType方法的典型用法代码示例。如果您正苦于以下问题:C# TypeContainer.ResolveType方法的具体用法?C# TypeContainer.ResolveType怎么用?C# TypeContainer.ResolveType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mono.CSharp.TypeContainer
的用法示例。
在下文中一共展示了TypeContainer.ResolveType方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Define
public override bool Define (TypeContainer parent)
{
Type t = parent.ResolveType (Type, false, Location);
if (t == null)
return false;
if (!parent.AsAccessible (t, ModFlags)) {
Report.Error (52, Location,
"Inconsistent accessibility: field type `" +
TypeManager.CSharpName (t) + "' is less " +
"accessible than field `" + Name + "'");
return false;
}
if (RootContext.WarningLevel > 1){
Type ptype = parent.TypeBuilder.BaseType;
// ptype is only null for System.Object while compiling corlib.
if (ptype != null){
TypeContainer.FindMembers (
ptype, MemberTypes.Method,
BindingFlags.Public |
BindingFlags.Static | BindingFlags.Instance,
System.Type.FilterName, Name);
}
}
if ((ModFlags & Modifiers.VOLATILE) != 0){
if (!t.IsClass){
Type vt = t;
if (TypeManager.IsEnumType (vt))
vt = TypeManager.EnumToUnderlying (t);
if (!((vt == TypeManager.bool_type) ||
(vt == TypeManager.sbyte_type) ||
(vt == TypeManager.byte_type) ||
(vt == TypeManager.short_type) ||
(vt == TypeManager.ushort_type) ||
(vt == TypeManager.int32_type) ||
(vt == TypeManager.uint32_type) ||
(vt == TypeManager.char_type) ||
(vt == TypeManager.float_type))){
Report.Error (
677, Location, parent.MakeName (Name) +
" A volatile field can not be of type `" +
TypeManager.CSharpName (vt) + "'");
return false;
}
}
}
FieldAttributes fa = Modifiers.FieldAttr (ModFlags);
if (parent is Struct &&
((fa & FieldAttributes.Static) == 0) &&
t == parent.TypeBuilder &&
!TypeManager.IsBuiltinType (t)){
Report.Error (523, Location, "Struct member `" + parent.Name + "." + Name +
"' causes a cycle in the structure layout");
return false;
}
FieldBuilder = parent.TypeBuilder.DefineField (
Name, t, Modifiers.FieldAttr (ModFlags));
TypeManager.RegisterFieldBase (FieldBuilder, this);
return true;
}
示例2: DoDefine
protected virtual bool DoDefine (TypeContainer parent)
{
if (Name == null)
Name = "this";
if (!parent.MethodModifiersValid (ModFlags, Name, Location))
return false;
flags = Modifiers.MethodAttr (ModFlags);
// Lookup Type, verify validity
MemberType = parent.ResolveType (Type, false, Location);
if (MemberType == null)
return false;
if ((parent.ModFlags & Modifiers.SEALED) != 0){
if ((ModFlags & (Modifiers.VIRTUAL|Modifiers.ABSTRACT)) != 0){
Report.Error (549, Location, "Virtual method can not be contained in sealed class");
return false;
}
}
// verify accessibility
if (!parent.AsAccessible (MemberType, ModFlags)) {
if (this is Property)
Report.Error (53, Location,
"Inconsistent accessibility: property type `" +
TypeManager.CSharpName (MemberType) + "' is less " +
"accessible than property `" + Name + "'");
else if (this is Indexer)
Report.Error (54, Location,
"Inconsistent accessibility: indexer return type `" +
TypeManager.CSharpName (MemberType) + "' is less " +
"accessible than indexer `" + Name + "'");
else if (this is Method)
Report.Error (50, Location,
"Inconsistent accessibility: return type `" +
TypeManager.CSharpName (MemberType) + "' is less " +
"accessible than method `" + Name + "'");
else
Report.Error (52, Location,
"Inconsistent accessibility: field type `" +
TypeManager.CSharpName (MemberType) + "' is less " +
"accessible than field `" + Name + "'");
return false;
}
if (MemberType.IsPointer && !UnsafeOK (parent))
return false;
//
// Check for explicit interface implementation
//
if ((ExplicitInterfaceName == null) && (Name.IndexOf (".") != -1)){
int pos = Name.LastIndexOf (".");
ExplicitInterfaceName = Name.Substring (0, pos);
ShortName = Name.Substring (pos + 1);
} else
ShortName = Name;
if (ExplicitInterfaceName != null) {
InterfaceType = RootContext.LookupType (
parent, ExplicitInterfaceName, false, Location);
if (InterfaceType == null)
return false;
// Compute the full name that we need to export.
Name = InterfaceType.FullName + "." + ShortName;
if (!parent.VerifyImplements (InterfaceType, ShortName, Name, Location))
return false;
IsExplicitImpl = true;
} else
IsExplicitImpl = false;
return true;
}