首页 > 代码库 > C# 引用访问权限
C# 引用访问权限
同样代码表现的不同行为
创建基类(Super)和派生类(Sub)每个类有一个字段field和一个公共方法getField,并且使用内联的方式初始化为1,方法getField返回字段field。C#和Java代码及运行结果如下
C#
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# 引用访问权限
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。