C#引用访问权限分析
本文实例分析了C#引用访问权限问题。分享给大家供大家参考。具体分析如下:
同样代码表现的不同行为:
创建基类(Super)和派生类(Sub)每个类有一个字段field和一个公共方法getField,并且使用内联的方式初始化为1,方法getField返回字段field。C#和Java代码及运行结果如下
class Super
{
public int field = 0;
public int getField()
{
return field;
}
}class Sub : Super
{
public int field = 1;
public int getField()
{
return field;
}
}class Program
{
private static void Main(string[] args)
{
Super sup = new Sub();
Console.WriteLine("sup.getField() result:" + sup.getField());
Console.ReadKey();
}
}
Java代码如下:
class Super {
public int field = 0;
public int getField() {
return field;
}
}
class Sub extends Super {
public int field = 1;
public int getField() {
return field;
}
}
public class polymorphicDefects {
public static void main(String[] args) {
Super sup = new Sub();
System.out.println("sup.getField() result:" + sup.getField());
}
}
Java代码运行结果表现出了多态性,而C#的方法并没有表现出多态性。更具体的说C#中对象sub并没有调用自己实际类型Sub中的方法而是去调用父类的方法。
可能用惯了Java的童鞋,突然使用C#在一点上有些许不习惯,其实C#团队在这里加入了一个概念,就是引用访问权限,一个引用代表着他的访问权限,Sub的引用仅能对Sub类型中自己的方法进行访问。
当然C#的方法不是支持多态,只是使用虚方法来表现方法的多态性,可看下面的例子:
class Super
{
public int field = 0;
public virtual int getField()
{
return field;
}
}class Sub : Super
{
public int field = 1;
public override int getField()
{
return field;
}
}class Program
{
private static void Main(string[] args)
{
Super sup = new Sub();
Console.WriteLine("sup.getField() result:" + sup.getField());
Console.ReadKey();
}
}
接下来我想说说我对C#引入引用访问权限的看法。引入了引用访问权限的C#比Java更加的强大了,也比Java多了一个新的特性,当然事情都是有两个方面的,对引用那个访问权限的引入也使C#更加复杂与不易。
希望本文所述对大家的C#程序设计有所帮助。
您可能感兴趣的文章:
- C# 引用访问权限,很多老手都不懂
- C# 引用访问权限
- C#.NET控制模块菜单的访问权限
- C# 访问修饰符 public、private、protectrd、internal、protected internal 访问权限
- C#的默认访问权限
- C#访问权限修饰符(转)
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- C#访问权限修饰符
- 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别
- C# 访问权限修饰符及默认访问权限
- C#.NET控制模块菜单的访问权限(走火入魔通用权限管理系统组件在信息管理系统中的用处)
- C#中在访问权限
- java 和 C# 的访问权限
- 转的。一个C#的问卷!private、 protected、 public、 internal 修饰符的访问权限
- Webservices-2.C#创建web服务,及引用访问、代码访问
- 【C#MVC4】菜单管理和访问权限分配(一)
- 返回对象时别返回引用&派生说明符导致的访问权限问题
- 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
- Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析