【问题标题】:Generate C# automatic properties with Codedom使用 Codedom 生成 C# 自动属性
【发布时间】:2011-01-08 12:47:57
【问题描述】:

有没有办法使用 Codedom 生成 C# 自动属性也许是我可以使用的另一组库?

【问题讨论】:

    标签: c# .net code-generation codedom


    【解决方案1】:

    不,不是:C# CodeDom Automatic Property

    查看this article 以获取一些有用的示例

    【讨论】:

    • 还有其他我可以使用的库吗?
    • @Yassir 创建一个支持字段并在 getter/setter 中使用它们真的不难。
    • 你不需要;正如 Marc Gravell 所说,您需要自己实现它,因为它们只是一个编译器技巧(即 .net 编译器创建一个私有变量来保存您的自动属性值)
    • 实际上我并没有编译生成的代码,而是将其添加到项目中,因此我需要生成的类具有自动属性
    • 在这种情况下,您可以使用 CodeSnippetStatement 并对该属性进行硬编码
    【解决方案2】:

    您可以为此目的使用 CodeSnippetTypeMember 类。

    例如:

        CodeTypeDeclaration newType = new CodeTypeDeclaration("TestType");
        CodeSnippetTypeMember snippet = new CodeSnippetTypeMember();
        snippet.Comments.Add(new CodeCommentStatement("this is integer property", true));
        snippet.Text="public int IntergerProperty { get; set; }";
        newType.Members.Add(snippet);
    

    【讨论】:

      【解决方案3】:

      CodeDom 应该是某种AST,可以转换为多种语言(通常是 C# 和 VB.NET)。因此,您不会在 CodeDom 中找到属于特定语言语法糖的功能。

      【讨论】:

        【解决方案4】:

        实际上,关于易于使用 CodeSnippetStatement 的 cmets 具有误导性,因为 CodeTypeDeclaration 没有可以将这些 sn-ps 添加到的语句集合。

        【讨论】:

          【解决方案5】:

          你可以这样做:根据How to: Create a Class Using CodeDOM

                  // Declare the ID Property.
                  CodeMemberProperty IDProperty = new CodeMemberProperty();
                  IDProperty.Attributes = MemberAttributes.Public;
                  IDProperty.Name = "Id";
                  IDProperty.HasGet = true;
                  IDProperty.HasSet = true;
                  IDProperty.Type = new CodeTypeReference(typeof(System.Int16));
                  IDProperty.Comments.Add(new CodeCommentStatement(
                  "Id is identity"));
                  targetClass.Members.Add(IDProperty);
          

          【讨论】:

          猜你喜欢
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-18
          • 1970-01-01
          • 2014-08-25
          相关资源
          最近更新 更多