C#难点逐个击破(5):类的访问类型

讲这四类之间的区别时有必要讲解一个概念:程序集。程序集(Assembly),可以简单理解为编译之后生成的.dll或.exe文件,相对于namespace是类库的逻辑组织形式,它可以称为程序类库的物理组织形式,msdn上描述“程序集包含描述它们自己的内部版本号和它们包含的所有数据和对象类型的详细信息的元数据”。一般情况是一个程序集可以包含一个或者多个命名空间。

Public:对其他任何类的任何方法都是可见的;
Private:本类中定义的成员只有本类的方法才能访问;
Protected:本类中的成员只有本类的方法及继承本类的类的方法才能访问;
internal:本类中的成员只有本类所在的程序集中的任何类的方法访问;
protected internal:为protected与internal的并集。
因此从访问级别由高到低应当是Public>protected internal>internal>Protected>Private

类的默认修饰符为internal ,类中的成员变量默认修饰符为private,namespace可认为修饰符为public。另一点在msdn上也提到继承类的访问级别不能大于被继承类的访问级别,如internal的类不能继承private的类。


代码如下:

using System;

/******************************
* Chapter:C#难点逐个击破(五)
* Author:王洪剑
* Date:2010-1-15
* Blog:http://www.51obj.cn/
* Email:walkingp@126.com
* Description:访问修改符
* ***************************/
namespace TestMain
{
public class A
{
public void Alert()
{
}
}

internal class B:A
{
internal new void Alert()
{
Console.WriteLine("you");
}
}

class Program
{
static void Main()
{
B b=new B();
b.Alert();

}
}
}

(0)

相关推荐

  • C#难点逐个击破(5):类的访问类型

    讲这四类之间的区别时有必要讲解一个概念:程序集.程序集(Assembly),可以简单理解为编译之后生成的.dll或.exe文件,相对于namespace是类库的逻辑组织形式,它可以称为程序类库的物理组织形式,msdn上描述"程序集包含描述它们自己的内部版本号和它们包含的所有数据和对象类型的详细信息的元数据".一般情况是一个程序集可以包含一个或者多个命名空间. Public:对其他任何类的任何方法都是可见的: Private:本类中定义的成员只有本类的方法才能访问; Protected:

  • C#难点逐个击破(1):ref参数传递

    一般情况,方法的参数传递是通过值进行传递的,即一个对象作为参数传递给方法使用,该对象便进驻到该参数对象所在指针的内存空间(使用C来描述),也就是该对象在此位置创建了副本,当方法运行结束时,该副本将会被销毁:这种传递方式的使用占据了日常方法传参的绝大多数. 另一种情况是引用传递,它与值传递方式不同,对象传递给方法时对方法参数并没有影响,仍然返回的是受原始参数取值影响的方法,即MethodInstance(ref _refValue)调用 Method(ref _arg)方法,但_refValue对

  • C#难点逐个击破(2):out返回参数

    传值(by value)与传址(by reference)分别为普通传递参数方式与ref声明方式,传址方式在使用前需要ref关键词修饰:out为输出返回传递,与ref相同之处较多,其重要区别是在上一节讲到的ref在被引用方法中必须被初始化:out在被引用方法中一定要有返回值. 复制代码 代码如下: using System; /****************************** * Chapter:C#难点逐个击破(一) * Author:王洪剑 * Date:2010-1-15 *

  • C#难点逐个击破(4):main函数

    还记得读大学时初识计算机编程时的C语言,Main(){},那时还不明白入口函数是什么意思,只知道照抄书本上的示例,一行一行地跑printf看. 在C#中Main()属于主入口函数,我们知识C.C#属于编译语言,可以想象为一段程序最开始的头部部分,由Main()函数进入逐语句进行编译后执行.假如html页面也称作编程语言的话,那么它就属于从上到下一句一句(下载)执行:js也是由上到下执行,不过js相当诡异,变量作用域要特别对待:在asp.net中一般情况下是以Page_Load(object se

  • C#难点逐个击破(3):params数组参数

    在方法声明中只允许一个paras关键字,并且该关键字只能为最后一个. 复制代码 代码如下: using System; /****************************** * Chapter:C#难点逐个击破(三) * Author:王洪剑 * Date:2010-1-16 * Blog:http://www.51obj.cn/ * Email:walkingp@126.com * Description:数组参数params的使用 * ***********************

  • C#难点逐个击破(9):类型转换

    显式转换与隐式转换 类型之间的转换可以分为隐式转换与显式转换,如int类型可直接转换为long类型. 复制代码 代码如下: /*隐式转换*/ int intNum = 23; long longNum1 = intNum; 也可进行显式转换: 复制代码 代码如下: /*显式转换*/ int intNum = 23; long longNum2 = (long)intNum; Parse 每个值类型都包含Parse()依法,它将字符串转换成对应的数值类型] 复制代码 代码如下: /*Parse转换

  • C#难点逐个击破(6):C#数据类型与.net framework数据类型

    其中有<Java程序设计教程>是一个美籍华人的作品,还有Nicholas C.Zakes的<Javascript高级程序设计>,还有就是这本Illustrator C# 2008,中文译为"插图详解C#2008",实际上插图不是很多.这是我第一次完整的读原版书,感慨良深.一是我的英文居然还可以,想当初考六级还差了20多分,–!!二是老外写书真的是用心在写,对待自己的书就像对待自己的孩子一样. 以上是闲话,之前一直很想知道.net framework数据存储类型在

  • C#难点逐个击破(7):checked与unchecked

    C#默认情况下,若常数表达式的值超过了目标类型的最大值,将会导致编译错误. 若目标数据类型不能容纳非常数表达式的数据,那么数据在赋值时会被截断. 复制代码 代码如下: class Program { static void Main(string[] args) { int n = int.MaxValue;//n=2147483647 n = n + 1; System.Console.WriteLine(n); } } 此时可用内存存储数据来解释,之前int.MaxValue在内存为为32位

  • C#难点逐个击破(8):可空类型System.Nullable

    null与void null值用来表示数据类型未被赋予任何值,它是一种引用类型:void表示没有类型,或者说是没有任何值.null与void的区别可以认为void是根本没有,而null是一个空箱子,里面什么都没有. null值只能赋值给引用类型,这里注意到string也是一种引用类型:引用类型在C中称为"指针",即存放变量位置的内存空间位置.将变量设为null,会显式地设置引用,且它本身不指向任何内存位置: null值赋给值类型将导致编译错误. void用于方法值的返回,其本质并不是一

  • 详解Java中的checked异常和unchecked异常区别

    (一)Java的异常层次结构 要想明白Java中checked Exception和unchecked Exception的区别,我们首先来看一下Java的异常层次结构. 这是一个简化的Java异常层次结构示意图,需要注意的是所有的类都是从Throwable继承而来,下一层则分为两个结构,Error和Exception.其中Error类层次描述了Java运行时系统的内部错误和资源耗尽错误,这种错误除了简单的报告给用户,并尽力阻止程序安全终止之外,一般也米有别的解决办法了. (二)unchecke

随机推荐