首页 新闻 搜索 专区 学院

反编译system.data.oracleclient.dll ,为什么有些函数这么奇怪

0
悬赏园豆:15 [已解决问题] 解决于 2016-01-06 11:53

就是那个圈红的部分,在vs中敲了一下,这样写是会报错的,而且也没有方法体,太奇怪了,来比较一下反编译system.data.sqlclient就很明显了,是不是system.data.oracleclient.dll上面的是接口的意思?

小小乌龟把头藏的主页 小小乌龟把头藏 | 初学一级 | 园豆:9
提问于:2015-12-31 10:51
< >
分享
最佳答案
0

你的意思是public new这个地方么?

这个其实和重载差不多,就是override,但是,override有时候这个地方不能用,而如果用public new string GetName(){}依然能够覆盖掉父类的stringGetName方法。且对父类不影响。说白了,就是这里不是重载,而是隐藏,隐藏父类的同名同参方法。

既然提到这个dll,我提醒一下,这个东西从2010年微软就提示这个工具过期了,建议使用Oracle自己的ODP。所以,建议换成Oracel.ManagedDataAccess.Client.dll。因为System.Data.OracleClient就是一个中间件,帮助调用本地的Oracle客户端,这将导致客户端的位数版本等都会引用到托管代码。而且在更新方面,System.Data.OracleClient已经停止更新,支持的功能也少。

收获园豆:15
ensleep | 小虾三级 |园豆:1403 | 2015-12-31 11:07

隐藏?没听说过哈,可以写个小demo给我看看么,感谢~~

小小乌龟把头藏 | 园豆:9 (初学一级) | 2015-12-31 11:18

@小小乌龟把头藏: 

 1  public class Girl
 2     {
 3         public bool Eat(string food)
 4         {
 5             Console.WriteLine("girl eating " + food);
 6             return true;
 7         }
 8     }
 9     public class Boy:Girl
10     {
11         public new bool Eat(string food)
12         {
13             Console.WriteLine("boy eating " + food);
14             return true;
15         }
16     }
17     public class World
18     {
19         public void Feed()
20         {
21             Girl g = new Girl();
22             g.Eat("girl's meat");
23             Boy b = new Boy();
24             b.Eat("boy's meat");
25         }
26     }
ensleep | 园豆:1403 (小虾三级) | 2015-12-31 11:25

@小小乌龟把头藏: 再不明白你就想,虚方法用override重写,普通方法用new。区别就是父类的虚方式是无法被执行的,在被重写的时候,执行时执行的是子类的方法。而且因为普通方法是可以执行的,所以父类的普通方法被执行时执行的是父类的普通方法,在这里的面向对象,C#要求的比java高。

ensleep | 园豆:1403 (小虾三级) | 2015-12-31 11:31

@ensleep: 谢谢

小小乌龟把头藏 | 园豆:9 (初学一级) | 2016-01-06 11:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册