C#中私有类的概念

Posted

技术标签:

【中文标题】C#中私有类的概念【英文标题】:Concept of Private class in C# 【发布时间】:2011-06-21 20:23:12 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

未嵌套在其他类或结构中的类和结构可以是 publicinternal。任何其他类型都可以访问声明为 public 的类型。声明为 internal 的类型只能由同一程序集中的类型访问。类和结构默认声明为internal,除非在类定义中添加关键字public。

类或结构定义可以添加 internal 关键字以明确其访问级别。访问修饰符不会影响类或结构本身——它始终可以访问自身及其所有成员。

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

派生类的可访问性不能高于其基类。换句话说,您不能拥有从内部类 A 派生的公共类 B。如果允许这样做,则会产生使 A 成为公共的效果,因为 A 的所有受保护或内部成员都可以从派生类访问。


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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

除了实习生课程之外,您还希望在什么情况下开设“私人”课程?

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

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


【讨论】:

【参考方案4】:

没有。 这样一个类的范围是什么?

【讨论】:

我猜 OP 在 Java 方面更有经验,这将允许在同一个源文件中可见。【参考方案5】:

我们可以在其他类中将一个类声明为 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;
      
    
  

【讨论】:

从这里复制的答案 - social.msdn.microsoft.com/Forums/en-US/…

以上是关于C#中私有类的概念的主要内容,如果未能解决你的问题,请参考以下文章

C# 类的概念

类的对象可以访问其私有方法吗?

子类到底能不能继承父类的私有属性?

类的概念

单例模式概念

类的基本概念