当前位置: 首页>>代码示例>>C#>>正文


C# CodeTypeDeclaration.InheritsFrom方法代码示例

本文整理汇总了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;
        }
开发者ID:larsenjo,项目名称:odata.net,代码行数:95,代码来源:PocoEntityClassGenerator.cs


注:本文中的System.CodeDom.CodeTypeDeclaration.InheritsFrom方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。