最近去面试,被问到c#中类的默认访问修饰符,被搞晕了,回来在网上找到一篇好文章,才明白到底是怎么回事。

以下转自:http://blog.163.com/wangzhenbo85@126/blog/static/10136328220110811312766/

类(class)或结构(struct)如果不是在其它类或结构中的话,它的访问类型要不就是internal, 要不就是public; 换句话说,如果它在其它类或结构中的话,则可以为private 或protected等。下面我说的类和结构,如无特殊说明,均指非"类中类" 类中所有的成员,默认均为private。   C#用多种修饰符来表达类的不同性质。根据其保护级C#的类有五种不同的限制修饰符:     public可以被任意存取;   protected只可以被本类和其继承子类存取;   internal只可以被本组合体(Assembly)内所有的类存取,组合体是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE”。   protected internal唯一的一种组合限制修饰符,它只可以被本组合体内所有的类和这些类的继承子类所存取。   private只可以被本类所存取。   如果不是嵌套的类,命名空间或编译单元内的类只有public和internal两种修饰。     new修饰符只能用于嵌套的类,表示对继承父类同名类型的隐藏。   override 只能用于嵌套的类,表示对继承父类同名类型的覆盖。

abstract用来修饰抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。abstract不能和new同时用。下面是抽象类用法的伪码:     abstract class A  {     public abstract void F();  }  abstract class B: A  {     public void G() {}  }  class C: B  {     public override void F()      {   //方法F的实现     }  }    抽象类A内含一个抽象方法F(),它不能被实例化。类B继承自类A,其内包含了一个实例方法G(),但并没有实现抽象方法F(),所以仍然必须声明为抽象类。类C继承自类B,实现类抽象方法F(),于是可以进行对象实例化。     sealed用来修饰类为密封类,阻止该类被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。

enum 的默认访问修饰符:public,且此类型不允许其它访问修饰符interface的默认访问修饰符:interal,且此类型不允许其它访问修饰符;接口的成员默认访问修饰符是public,也不可能是其他访问修饰符 委托,默认internal 命名空间上不允许使用访问修饰符。命名空间没有访问限制。(命名空间,枚举类型成员默认public,也不可能是其他访问修饰符 //?????? 待验证)

c# 的访问修饰符是private 还是 internal? 准确的说,不能一概而论。 [MSDN] Classes and structs that are not nested within other classes or structs can be either public or internal. A type declared as public is accessible by any other type. A type declared as internal is only accessible by types within the same assembly. Classes and structs are declared as internal by default unless the keyword public is added to the class definition, as in the previous example. Class or struct definitions can add the internal keyword to make their access level explicit. Access modifiers do not affect the class or struct itself — it always has access to itself and all of its own members.
类(class)或结构(struct)如果不是在其它类或结构中的话,它的访问类型要不就是internal, 要不就是public; 换句话说,如果它在其它类或结构中的话,则可以为private 或protected等。下面我说的类和结构,如无特殊说明,均指非"类中类" 类或结构的默认访问类型是internal. 类中所有的成员,默认均为private。

[MSDN] Interfaces, like classes, can be declared as public or internal types. Unlike classes, interfaces default to internal access. Interface members are always public, and no access modifiers can be applied. Namespaces and enumeration members are always public, and no access modifiers can be applied. Delegates have internal access by default. Any types declared within a namespace or at the top level of a compilation unit (for example, not within a namespace, class, or struct) are internal by default, but can be made public.

接口默认访问符是internal 接口的成员默认访问修饰符是public,也不可能是其他访问修饰符 命名空间,枚举类型成员默认public,也不可能是其他访问修饰符 委托,默认internal 在命名空间内部或编译单元顶部的所有类型,默认是internal,可以人为改为public。

【转】c#中类的默认访问修饰符相关推荐

  1. C#中的默认访问修饰符

    C#中的默认访问修饰符 1.命名空间下的元素的默认访问修饰符   public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员. internal : 同一程序集中的任何 ...

  2. java默认访问修饰符是,java默认访问修饰符

    java.lapplet.Applet D. java.awt.Frame XXX13.下列选项中,哪个方法不是 JAVA 的访问修饰符(C) A. private B. protected C. f ...

  3. java 修饰符默认_Java中的默认访问修饰符是什么?

    Java中的默认访问修饰符是什么? 这个问题在这里已有答案: 什么是默认访问修饰符?                                     12个答案 如果我没有明确说明方法或实例变 ...

  4. C# 接口和类的默认访问修饰符

    接口 接口默认访问符是internal. 接口的成员默认访问修饰符是public,不需要给接口的方法加修饰符.加了反而报错. C#接口可以包含方法.属性.事件和索引器. interface IMyEx ...

  5. [转载] java接口中方法的默认访问修饰符为public

    参考链接: Java接口方法 如果一个接口Cup有个方法use(),有个类SmallCup实现接口Cup,则在类SmallCup中正确的是?  ( ) A.void use() { -} B.prot ...

  6. C#基础11:五种访问修饰符

    五种访问修饰符: public:公开的访问权限,当前类.子类.实例对象都可以访问到 private:私有的访问权限,只能在当前类内部进行访问使用,子类和实例对象都访问不到 protected:受保护的 ...

  7. 访问修饰符(默认是什么)

    1.命名空间下的元素的默认访问修饰符 public: 同一程序集的其他任何代码或应用改程序集的其他程序集都可以访问该类型或成员. Internal:同一程序集中的任何代码都可以访问该类型或成员,但其他 ...

  8. C++:类访问修饰符

    C++ 类访问修饰符 类成员的访问限制是通过在类主体内部对各个区域标记 public.private.protected 来指定的. 关键字 public.private.protected 称为访问 ...

  9. 类和对象编程(二):类访问修饰符

    C++ 类访问修饰符 数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员.类成员的访问限制是通过在类主体内部对各个区域标记 public.private.protected 来指 ...

最新文章

  1. IDC数据中心机房该如何节能
  2. 全面解析Java的垃圾回收机制
  3. python!!!!惊了,这世上居然还有这么神奇的东西存在
  4. jquer WdatePicker 使用 手册
  5. 动物之美计算机教案,清华大学版六年级上册信息技术教案第三课 动物之美——图像分类管理.pdf...
  6. 《你必须知道的.NET》抽奖温暖启动
  7. 安卓rom制作教程_刹那 刷机教程201三星S10 N10等系列 韩版国行安卓9升级10 详细步骤...
  8. scala问题解决sbt下载过慢的问题
  9. 计算机组成原理奉远祯,计算机组成原理笔记.doc
  10. matlab 傅里叶变换 频谱图,傅里叶变换与信号频谱图.PDF
  11. c语言开发 kdj,[转载]随机指标KDJ,及其MA、EMA、SMA、DMA介绍
  12. 基于Excel的股票回测
  13. 音乐播放器 android 回放增益,每日佳软:安卓强悍音乐播放器之PowerAMP
  14. eclipse安装GWT插件
  15. java线程池中的Worker解析
  16. <Halcon>基于形状和轮廓的模板匹配
  17. [附源码]计算机毕业设计JAVA新能源汽车租赁管理系统
  18. DICOM标准中关于C-Find,运用StudyTime进行查找时无法查找到数据的问题
  19. python --给图片加文字
  20. 蓝桥杯2020年填空题既约分数

热门文章

  1. C#中调用API函数RegisterHotKey注册多个系统热键
  2. 信息系统项目管理师-项目合同管理考点笔记
  3. Winform中实现图片格式转换(附代码下载)
  4. Docker中部署项目到容器
  5. 基于用例点来度量软件规模并管理进度 之三
  6. Flutter创建圆圈图标按钮
  7. Flutter实战之(Clubhouse App)
  8. 周报速递丨《“十四五”国家信息化规划》出台;​快手美团两大生态互联互通
  9. 使用字符代替圆角尖角研究(转)
  10. PHP几个防SQL注入攻击自带函数区别