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

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

【问题讨论】:

    标签: c# .net access-modifiers


    【解决方案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;
                }
              }
            }
          

          【讨论】:

          猜你喜欢
          • 2021-09-15
          • 2022-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多