C#引用访问权限分析

所属分类: 软件编程 / C#教程 阅读数: 68
收藏 0 赞 0 分享

本文实例分析了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#抽象类与抽象方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#代码实现扑克牌排序的几种方式

今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#泛型概念的简介与泛型的使用

今天小编就为大家分享一篇关于C#泛型概念的简介与泛型的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C# 7.0 使用下划线忽略使用的变量的原因分析

这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# 中使用正则表达式匹配字符的含义

正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

C# Dictionary和SortedDictionary的简介

今天小编就为大家分享一篇关于C# Dictionary和SortedDictionary的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#中SQL Command的基本用法

今天小编就为大家分享一篇关于C#中SQL Command的基本用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataReader访问数据的优点和实例

今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL Dataset数据集代码实例

今天小编就为大家分享一篇关于的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataAdapter数据适配代码实例

今天小编就为大家分享一篇关于C#使用SQL DataAdapter数据适配代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多