【问题标题】:How to create a private class using CodeDOM?如何使用 CodeDOM 创建私有类?
【发布时间】:2013-03-04 08:38:44
【问题描述】:

我正在使用 CodeDOM 编译一个 *.cs 文件,该文件基于从 SQL 服务器检索的数据表。因此,编译后的代码应该是特定表的实体类。我设法将该类编译为公共、内部或接口类。

例如。

public class SomeThing(){} 

internal class Something(){}

但问题是没有属性可以使用 CodeDOM 将类设为私有。有什么方法可以完成工作吗?

我将此代码用作我的模板http://msdn.microsoft.com/en-us/library/ms404245(v=vs.100).aspx

【问题讨论】:

  • 如果你使用TypeAttributes.NestedPrivate会发生什么?请注意,私有类必须是嵌套类。
  • 除非你想像 Jon 所说的那样创建一个嵌套类,否则你希望谁能够看到这个 private 类?它与internal 有何不同?
  • TypeAttributes.NestedPrivate 完成了这项工作。谢谢。
  • @Zdeslav 内部类对其所在的程序集是可见的。但私人不是。它是完全封装的。我对吗? MSDN 声明“内部类型或成员只能在同一程序集中的文件中访问”
  • 没有私有顶级类这样的东西。它只对自己可见,这是没有意义的,因为没有其他类可以使用它。这就是为什么提到“除非......嵌套类”。

标签: c# codedom


【解决方案1】:

顶级私有类没有多大意义,因为它们对其他类型是不可见的。嵌套类可以是私有的。

这是 C# 语言规范的摘录:

3.5.2 辅助功能域

顶级未绑定类型 T(第 4.4.3 节)的可访问域 在程序中声明的 P 定义如下:

  • 如果声明的 T 的可访问性是公共的,则 T 的可访问域是 P 的程序文本和任何引用的程序
  • 页。如果声明的 T 的可访问性是内部的,则 T 的可访问域是 P 的程序文本。

从这些定义可以得出,一个可访问域 顶级未绑定类型始终至少是 声明该类型的程序。可访问域 构造类型 T 是 未绑定的泛型类型 T 的可访问域和 类型参数 A1, ...,AN 的可访问域。

在类型 T 中声明的嵌套成员 M 的可访问域 在程序 P 中定义如下(注意 M 本身可能 可能是一个类型):

  • 如果声明的 M 的可访问性是公共的,则 M 的可访问域是 T 的可访问域。
  • 如果声明的 M 的可访问性是内部受保护的,则令 D 为 P 的程序文本和任何类型的程序文本的并集 派生自 T,它在 P 之外声明。可访问域 的 M 是 T 的可访问域与 D 的交集。
  • 如果声明的 M 的可访问性受到保护,则令 D 为 T 的程序文本和任何类型的程序文本的并集 T. M 的可达域是 T 与 D 的可访问域。
  • 如果声明的 M 的可访问性是内部的,则 M 的可访问域是 T 的可访问域与 P.的程序文本。
  • 如果声明的 M 的可访问性是私有的,则 M 的可访问域是 T 的程序文本。

【讨论】:

    【解决方案2】:

    TypeAttributes NotPublic 呢?

    【讨论】:

    • 内部类属性
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多