C#中私有类的概念

时间:2011-02-05 11:19:00

标签: c# .net access-modifiers

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

5 个答案:

答案 0 :(得分:38)

根本没有。除非它在嵌套类

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

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

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

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

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

答案 1 :(得分:8)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:2)

没有。 这类课程的范围是什么?

答案 4 :(得分:1)

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