`
meinvchengxuyuan
  • 浏览: 74234 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

c#中类的默认访问修饰符

 
阅读更多
最近去面试,被问到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#和java中的访问修饰符

    知道c#中类和接口等默认修饰符吗?知道其成员的吗?知道各修饰符的作用吗?看看绝对帮到你。。

    c#的默认访问修饰符小结[文].pdf

    c#的默认访问修饰符小结[文].pdf

    C#类的访问修饰符用法分析

    本文详细分析了C#类的访问修饰符用法,分享给大家供大家参考。具体用法分析如下: 默认情况下,类声明为内部的,即只有当前工程中的代码才能访问它。可以用internal访问修饰符关键字显式指定,但这不是必须的,类在...

    asp.net 修饰符介绍(关于public、private、protected、internal)

    internal修饰符修饰的类或类成员的访问权限为同一程序集内部,C#默认的类访问修饰符即为internal。 4.public修饰符 public修饰符则为公共访问权限,对代码的访问没有任何限制, 大多数情况下必须谨慎使用public修饰...

    c#题库.doc

    2.类的字段和方法的默认访问修饰符是( )。 A. public B. private C. protected D. internal 3. C#代码注释部分以( )开始。 A. “ B. ? ? C. // D. { 4. 假定一个10行20列的二维整型数组,下列哪个...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    5.6.6 为取值方法和赋值方法指定访问修饰符 160 5.6.7 属性作为虚字段使用 161 5.6.8 属性和方法调用不允许作为ref或out参数值使用 163 5.7 构造器 164 5.7.1 构造器的声明 164 5.7.2 默认...

    C# 基础知识系列- 13 常见类库介绍(二)日期时间类

    静态构造函数与普通普通构造函数的区别是,静态构造函数没有访问修饰符,即访问修饰符是默认的,且静态构造函数只能是无参的,并添加 static 修饰符;静态构造函数不能手动调用,会在类加载的时候由系统自己加载。 1...

    C#本质论(第3版)

    5.6.6 为取值方法和赋值方法指定访问修饰符 5.6.7 属性作为虚字段使用 5.6.8 属性和方法调用不允许作为ref或out参数值使用 5.7 构造器 5.7.1 构造器的声明 5.7.2 默认构造器 5.7.3 对象初始化器 5.7.4 构造...

    在一小时内学会 C#(txt版本)

    在一小时内学会 C#。...你可以使用 unsafe 修饰符在 C# 中定义一个不安全上下文。在不安全上下文中,你可以插入不安全代码,如 C++ 的指针等。参见以下代码: 复制内容到剪贴板 代码: public unsafe MyFunction...

    c#学习笔记——学习心得

    访问修饰符:private、public、protected、internal:局部的 readonly:只读修饰符 new(新的)、static(静态的)、virtual(虚拟的)、override()、sealed(密封的)、abstranct(抽象的)、extern(外面的) 派生类调用基类的...

    微软C#语言规范,C#语言教程中文版

    10.3.5 访问修饰符 281 10.3.6 构成类型 281 10.3.7 静态成员和实例成员 281 10.3.8 嵌套类型 282 10.3.8.1 完全限定名 282 10.3.8.2 已声明可访问性 282 10.3.8.3 隐藏 283 10.3.8.4 this 访问 283 10.3.8.5 对包含...

    c#学习笔记.txt

    访问修饰符 public private internal protected 指定声明的类型和类型成员的可访问性。 访问不受限制 只有包含该类的成员的类可以访问 只有当前工程可以访问 只有包含该成员的类和继承的类可以访问 abstract...

    C#中的应用程序接口介绍及实现,密封类与密封方法

    接口的成员可以是方法(不能有方法体),属性,事件和索引器,但不能包含常数,字段,运算符,实例构造函数析构函数或类,也不能包括任何种类的静态成员,接口中的成员不允许添加访问修饰符,(默认都是public) ...

    C#语言规范(2.0,3.0,4.0合集)

    10.3.5 访问修饰符 281 10.3.6 构成类型 281 10.3.7 静态成员和实例成员 281 10.3.8 嵌套类型 282 10.3.8.1 完全限定名 282 10.3.8.2 已声明可访问性 282 10.3.8.3 隐藏 283 10.3.8.4 this 访问 283 10.3.8.5 对包含...

    C#教程(语言规范)

    5.1.2.1 类中的实例变量 .. 85 5.1.2.2 结构中的实例变量 ... 85 5.1.3 数组元素... 86 5.1.4 值参数. 86 5.1.5 引用形参... 86 5.1.6 输出形参... 86 5.1.7 局部变量... 86 5.2 默认值 . 87 vi C#语言规范 ...

    C#语言规范(4.0版本)

    10.3.5 访问修饰符 281 10.3.6 构成类型 281 10.3.7 静态成员和实例成员 281 10.3.8 嵌套类型 282 10.3.8.1 完全限定名 282 10.3.8.2 已声明可访问性 282 10.3.8.3 隐藏 283 10.3.8.4 this 访问 283 10.3.8.5 对包含...

    浅谈C# 字段和属性

    注意:类的成员在定义的时候没有显示的写出访问修饰符,则默认是private。对应到字段和属性中,通常字段修饰为private,属性修饰为public。 二、字段的使用 1.关于字段 a.字段又称为:“成员变量”,一般在类的内部...

    C#语言规范4.0

    10.3.5 访问修饰符 281 10.3.6 构成类型 281 10.3.7 静态成员和实例成员 281 10.3.8 嵌套类型 282 10.3.8.1 完全限定名 282 10.3.8.2 已声明可访问性 282 10.3.8.3 隐藏 283 10.3.8.4 this 访问 283 10.3.8.5 对包含...

    微软 C#语言参考 CHM格式

    10.2.3 访问修饰符... 174 10.2.4 要素类型... 174 10.2.5 静态和实例成员... 174 10.2.6 嵌套类型... 175 10.3 常数... 175 10.4 域 176 10.4.1 静态和实例域... 177 10.4.2 只读域... 178 10.4.3 域的初始化... ...

    C#与.NET技术平台实战演练.part1

    多态与接口11-l扩充基础类的功能11-1-l继承的语法11-l-2简单的UML描述11-2扩充类的继承11-2-1使用访问修饰符控制存取权限11-2-2protected成员的继承11-3调用基础类的构造器声明构造器ll-4改写基础类的方法11-4-1定义...

Global site tag (gtag.js) - Google Analytics