本文整理汇总了C#中System.CodeDom.CodeTypeDeclaration.InheritsFrom方法的典型用法代码示例。如果您正苦于以下问题:C# CodeTypeDeclaration.InheritsFrom方法的具体用法?C# CodeTypeDeclaration.InheritsFrom怎么用?C# CodeTypeDeclaration.InheritsFrom使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.CodeDom.CodeTypeDeclaration
的用法示例。
在下文中一共展示了CodeTypeDeclaration.InheritsFrom方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BuildType
/// <summary>
/// Builds a code representation of an <see cref="EntityType"/>.
/// </summary>
/// <param name="type">The <see cref="EntityType"/> from which to generate code.</param>
/// <returns>A <see cref="CodeTypeDeclaration"/> which represents the <see cref="EntityType"/>.</returns>
protected virtual CodeTypeDeclaration BuildType(EntityType type)
{
var codeClass = new CodeTypeDeclaration(type.Name);
var defaultConstructor = codeClass.AddConstructor();
ApplyTypeAccessModifier(codeClass, type.Annotations.OfType<TypeAccessModifierAnnotation>().SingleOrDefault());
if (type.Annotations.Any(a => a is SerializableAnnotation))
{
codeClass.AddCustomAttribute(typeof(SerializableAttribute));
}
if (type.Annotations.Any(a => a is CodeAttributeAnnotation))
{
this.AddCodeAttributeAnnotationAsCustomAttribute(codeClass, type.Annotations.OfType<CodeAttributeAnnotation>());
}
var genericTypeAnnotation = type.Annotations.OfType<GenericTypeAnnotation>().FirstOrDefault();
if (genericTypeAnnotation != null)
{
foreach (var typeParameter in genericTypeAnnotation.TypeParameters)
{
codeClass.TypeParameters.Add(new CodeTypeParameter(typeParameter));
}
}
if (type.BaseType != null)
{
var baseType = new CodeTypeReference(type.BaseType.FullName);
var baseGenericTypeAnnotation = type.BaseType.Annotations.OfType<GenericTypeAnnotation>().SingleOrDefault();
var genericArgumentsAnnotation = type.Annotations.OfType<GenericArgumentsAnnotation>().SingleOrDefault();
if (genericArgumentsAnnotation != null)
{
foreach (var typeParameter in baseGenericTypeAnnotation.TypeParameters)
{
var typeRef = Code.TypeRef(typeParameter);
var argument = genericArgumentsAnnotation.GenericArguments.SingleOrDefault(g => g.TypeParameterName == typeParameter);
if (argument != null)
{
typeRef = codeTypeReferenceResolver.Resolve(argument.DataType);
}
else
{
if (genericTypeAnnotation == null || !genericTypeAnnotation.TypeParameters.Contains(typeParameter))
{
throw new TaupoArgumentException(
string.Format(
CultureInfo.InvariantCulture,
"Entity type {0} cannot derive from entity type {1} because it does not specify a {2} or {3} to fill in {1}'s generic parameter {4}.",
type.Name,
type.BaseType.Name,
typeof(GenericTypeAnnotation).Name,
typeof(GenericArgumentsAnnotation).Name,
typeParameter));
}
}
baseType.TypeArguments.Add(typeRef);
}
}
else
{
if (baseGenericTypeAnnotation != null)
{
throw new TaupoArgumentException(
string.Format(
CultureInfo.InvariantCulture,
"Entity type {0} cannot derive from entity type {1} because it does not specify a {2} or {3} to fill in {1}'s generic parameter {4}.",
type.Name,
type.BaseType.Name,
typeof(GenericTypeAnnotation).Name,
typeof(GenericArgumentsAnnotation).Name,
baseGenericTypeAnnotation.TypeParameters.First()));
}
}
codeClass.InheritsFrom(baseType);
}
if (type.IsAbstract)
{
codeClass.SetAbstract();
}
this.AddProperties(codeClass, type);
this.AddNavigationProperties(codeClass, type, defaultConstructor);
return codeClass;
}