当前位置: 首页 > 编程笔记 >

C#引用访问权限分析

郎魁
2023-03-14
本文向大家介绍C#引用访问权限分析,包括了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#程序设计有所帮助。

 类似资料:
  • 本文向大家介绍java类访问权限与成员访问权限解析,包括了java类访问权限与成员访问权限解析的使用技巧和注意事项,需要的朋友参考一下 在写代码的时候有个问题:包内定义了一个接口类,另外一个包要实现它,这里采用接口隔离与依赖倒置原则,将两个包的依赖关系倒置过来。但是,这里就遇到了一个问题,实现类采用工厂模式来实例化,所以实现类就不想暴露给包外,但是实现类还要实现public接口。所以这里有产生了一

  • 在Mac OS X上运行grails 2.2.0和mysql(mysql版本14.14发行版5.6.10,用于osx10.7(x86_64)使用EditLine包装器),我开始遇到奇怪的拒绝访问错误。 示例代码 通常的授予和数据库在运行grails之前创建。 用一个全新的项目进行测试,当然它是有效的。。思想? /

  • 获取访问攻击是网络渗透测试的第二部分。 在本节中,我们将连接到网络,这将使我们能够发起更强大的攻击并获得更准确的信息。 如果网络不使用加密,我们可以连接到它并嗅出未加密的数据。 如果网络是有线的,我们可以使用电缆并连接到它,可能通过更改我们的MAC地址。唯一的问题是攻击目标使用加密,如WEP,WPA,WPA2。 如果我们确实遇到加密数据,我们需要知道解密它的密钥,这在本章将会学习和实践。 如果网络

  • 3.1. 访问权限暴露 数据库使用中需要关注的主要问题之一是访问权限即用户名及密码的暴露。在编程中为了方便,一般都会用一个db.inc文件保存,如: CODE: <?php $db_user = 'myuser'; $db_pass = 'mypass'; $db_host = '127.0.0.1'; $db = mysql_connect($db_host, $db_user, $db_pas

  • 问题内容: 我有几千个MySQL用户,它们都设置为允许从特定主机进行访问。问题在于,现在我将拥有两台计算机(将来将有两台计算机),它们将需要使用相同的帐户来访问他们的每个数据库。 我想要一种快速简便(尽可能自动化)的方法来运行和修改每个用户帐户的主机部分,以适合内部网络通配符。例如: ‘bugsy’@’internalfoo’可以访问’bugsy’数据库。 我现在想允许从内部网络上的任何地方进行错

  • 主要内容:开启 ACL 权限Linux 系统传统的权限控制方式,无非是利用 3 种身份(文件所有者,所属群组,其他用户),并分别搭配 3 种权限(读 r,写 w,访问 x)。比如,我们可以通过 ls -l 命令查看当前目录中所有文件的详细信息,其中就包含对各文件的权限设置: [root@localhost ~]# ls -l total 36 drwxr-xr-x. 2 root root 4096 Apr 15 16:33