欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#引用访问权限分析

程序员文章站 2023-12-15 08:52:46
本文实例分析了c#引用访问权限问题。分享给大家供大家参考。具体分析如下: 同样代码表现的不同行为:   创建基类(super)和派生类(sub)每个类有一个...

本文实例分析了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#程序设计有所帮助。

上一篇:

下一篇: