zoukankan      html  css  js  c++  java
  • 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#更加复杂与不易。
     
    不知道其他童鞋有什么看法没,可在评论区多交流。
  • 相关阅读:
    java socket解析和发送二进制报文工具(附java和C++转化问题)
    hibernate缓存机制(二级缓存)
    Spring MVC中前后台数据传输小结
    NUC972 MDK NON-OS
    代码是如何控制硬件的?
    C语言位运算+实例讲解(转)
    C语言程序真正的启动函数
    51单片机的时钟及总线时序和总线扩展
    如何通过Keil将程序正确的下载进flash中
    说说M451例程讲解之串口
  • 原文地址:https://www.cnblogs.com/gc2013/p/4112395.html
Copyright © 2011-2022 走看看