C#引用访问权限分析
本文实例分析了C#引用访问权限问题。分享给大家供大家参考。具体分析如下:
同样代码表现的不同行为:
创建基类(Super)和派生类(Sub)每个类有一个字段field和一个公共方法getField,并且使用内联的方式初始化为1,方法getField返回字段field。C#和Java代码及运行结果如下
{
publicintfield=0;
publicintgetField()
{
returnfield;
}
}
classSub:Super
{
publicintfield=1;
publicintgetField()
{
returnfield;
}
}
classProgram
{
privatestaticvoidMain(string[]args)
{
Supersup=newSub();
Console.WriteLine("sup.getField()result:"+sup.getField());
Console.ReadKey();
}
}
Java代码如下:
publicintfield=0;
publicintgetField(){
returnfield;
}
}
classSubextendsSuper{
publicintfield=1;
publicintgetField(){
returnfield;
}
}
publicclasspolymorphicDefects{
publicstaticvoidmain(String[]args){
Supersup=newSub();
System.out.println("sup.getField()result:"+sup.getField());
}
}
Java代码运行结果表现出了多态性,而C#的方法并没有表现出多态性。更具体的说C#中对象sub并没有调用自己实际类型Sub中的方法而是去调用父类的方法。
可能用惯了Java的童鞋,突然使用C#在一点上有些许不习惯,其实C#团队在这里加入了一个概念,就是引用访问权限,一个引用代表着他的访问权限,Sub的引用仅能对Sub类型中自己的方法进行访问。
当然C#的方法不是支持多态,只是使用虚方法来表现方法的多态性,可看下面的例子:
{
publicintfield=0;
publicvirtualintgetField()
{
returnfield;
}
}
classSub:Super
{
publicintfield=1;
publicoverrideintgetField()
{
returnfield;
}
}
classProgram
{
privatestaticvoidMain(string[]args)
{
Supersup=newSub();
Console.WriteLine("sup.getField()result:"+sup.getField());
Console.ReadKey();
}
}
接下来我想说说我对C#引入引用访问权限的看法。引入了引用访问权限的C#比Java更加的强大了,也比Java多了一个新的特性,当然事情都是有两个方面的,对引用那个访问权限的引入也使C#更加复杂与不易。
希望本文所述对大家的C#程序设计有所帮助。
相关文章
- C# winform美化窗体
- c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法
- C#10 新特性 [调用方参数表达式] 解决了我七年前的困惑
- 【地铁上的Redis与C#】数据类型(五)--Hash类型
- C#权限管理和设计浅谈
- c#解决IIS写Excel的权限问题
- C#获取计算机名,IP,MAC信息实现代码
- C#实现支持断点续传多线程下载客户端工具类
- C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
- C#操作txt文件,进行清空添加操作的小例子
- C#获取Windows进程监听的TCP/UDP端口实例
- c#定时器使用示例详解
- C#异常处理的一些经验和技巧
- c#+JQurey实现获取radio和checkbox的值