本文整理匯總了C#中Mono.ILASM.CodeGen.AddToDefineContentsList方法的典型用法代碼示例。如果您正苦於以下問題:C# CodeGen.AddToDefineContentsList方法的具體用法?C# CodeGen.AddToDefineContentsList怎麽用?C# CodeGen.AddToDefineContentsList使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Mono.ILASM.CodeGen
的用法示例。
在下文中一共展示了CodeGen.AddToDefineContentsList方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: Define
public void Define (CodeGen code_gen)
{
if (is_defined)
return;
if (is_intransit) {
// Circular definition
Report.Error ("Circular definition of class: " + FullName);
}
if (outer != null) {
PEAPI.TypeAttr vis = attr & PEAPI.TypeAttr.VisibilityMask;
if (vis == PEAPI.TypeAttr.Private || vis == PEAPI.TypeAttr.Public) {
/* Nested class, but attr not set accordingly. */
Report.Warning (location, String.Format ("Nested class '{0}' has non-nested visibility, set to such.", NestedFullName));
attr = attr ^ vis;
attr |= (vis == PEAPI.TypeAttr.Public ? PEAPI.TypeAttr.NestedPublic : PEAPI.TypeAttr.NestedPrivate);
}
}
if (parent != null) {
is_intransit = true;
parent.Resolve (code_gen);
is_intransit = false;
if (parent.PeapiClass == null) {
Report.Error ("this type can not be a base type: "
+ parent);
}
if (IsValueType (parent.PeapiClass.nameSpace, parent.PeapiClass.name))
is_value_class = true;
else if (IsEnumType (parent.PeapiClass.nameSpace, parent.PeapiClass.name))
is_enum_class = true;
if (!IsValueType (name_space, name) && !IsEnumType (name_space, name) &&
is_value_class && (attr & PEAPI.TypeAttr.Sealed) == 0) {
attr |= PEAPI.TypeAttr.Sealed;
}
if (outer != null) {
if (!outer.IsDefined)
outer.Define (code_gen);
classdef = outer.PeapiType.AddNestedClass (attr,
name_space, name, parent.PeapiClass);
} else {
if (is_value_class || is_enum_class) {
// Should probably confirm that the parent is System.ValueType
classdef = code_gen.PEFile.AddValueClass (attr,
name_space, name, is_value_class ? PEAPI.ValueClass.ValueType : PEAPI.ValueClass.Enum);
} else {
classdef = code_gen.PEFile.AddClass (attr,
name_space, name, parent.PeapiClass);
}
}
} else {
if (outer != null) {
if (!outer.IsDefined)
outer.Define (code_gen);
classdef = outer.PeapiType.AddNestedClass (attr,
name_space, name);
} else {
if (is_value_class || is_enum_class) {
classdef = code_gen.PEFile.AddValueClass (attr,
name_space, name, is_value_class ? PEAPI.ValueClass.ValueType : PEAPI.ValueClass.Enum);
} else {
classdef = code_gen.PEFile.AddClass (attr,
name_space, name);
}
}
if (FullName == "System.Object")
classdef.SpecialNoSuper ();
}
is_defined = true;
if (size != -1 || pack != -1)
classdef.AddLayoutInfo ( (pack == -1) ? 1 : pack, (size == -1) ? 0 : size);
if (impl_list != null) {
foreach (BaseClassRef impl in impl_list) {
impl.Resolve (code_gen);
classdef.AddImplementedInterface (impl.PeapiClass);
}
}
if (gen_params != null)
gen_params.Resolve (code_gen, classdef);
is_intransit = false;
code_gen.AddToDefineContentsList (this);
}