C#中私有类的概念

除了Inner类之外,C#中是否可以存在私有类?

没有。 除非它在嵌套类中,否则什么都没有

  • 未嵌套在其他类或结构中的类和结构可以是公共的内部的 。 声明为public的类型可由任何其他类型访问。 声明为internal的类型只能由同一程序集中的类型访问。 默认情况下 ,类和结构声明为内部,除非将关键字public添加到类定义中。

  • 类或结构定义可以添加内部关键字以使其访问级别显式。 访问修饰符不会影响类或结构本身 – 它始终可以访问自身及其所有成员。

  • 结构成员(包括嵌套类和结构)可以声明为public,internal或private。 类成员(包括嵌套类和结构)可以是公共的,受保护的内部,受保护的,内部的或私有的。 默认情况下,类成员和结构成员(包括嵌套类和结构)的访问级别是私有的。 无法从包含类型外部访问专用嵌套类型。

  • 派生类的基本类型不具有更大的可访问性。 换句话说,你不能拥有一个派生自内部类A的公共类B.如果允许这样做,它将具有使A成为公共的效果,因为A的所有受保护或内部成员都可以从派生类访问。


    您可以使用InternalsVisibleToAttribute启用特定的其他程序集以访问内部类型。

不,没有。 除非嵌套,否则不能拥有私有类。

在什么情况下,对于一个天生的课程,你想要一个“私人”课程吗?

您可以使用internal修饰符创建仅在当前程序集中可见的类。

 // the class below is only visible inside the assembly in where it was declared internal class MyClass { } 

不,这类课程的范围是什么?

我们可以在其他类中声明一个类为Private。 请找到以下代码,了解如何实现相同的目标:

  public class Class1 { temp _temp ; public Class1() { _temp = new temp(); } public void SetTempClass(string p_str, int p_Int) { _temp.setVar(p_str, p_Int); } public string GetTempClassStr() { return _temp.GetStr(); } public int GetTempClassInt() { return _temp.GetInt(); } private class temp { string str; int i; public void setVar(string p_str, int p_int) { str = p_str; i = p_int; } public string GetStr() { return str; } public int GetInt() { return i; } } } 

我发现Main()方法的C#Default访问修饰符的信息对于用其他语言编程的这个问题也很有用。 从下面的示例中,MyClass将是内部的,而静态void main将是私有的。 正如Peter Talyor暗示其他语言不同,所以我认为值得明确表达。 Visual Studio取决于项目,创建一个类似于下面的初始程序cs文件; 在链接堆栈流文章中提到的Visual Studio中的“视图”选项卡下的类视图可用于检出访问修饰符。

 namespace MyNamespace{ class MyClass{ static void Main(string[] args){ } } }