就是那个圈红的部分,在vs中敲了一下,这样写是会报错的,而且也没有方法体,太奇怪了,来比较一下反编译system.data.sqlclient就很明显了,是不是system.data.oracleclient.dll上面的是接口的意思?
你的意思是public new这个地方么?
这个其实和重载差不多,就是override,但是,override有时候这个地方不能用,而如果用public new string GetName(){}依然能够覆盖掉父类的stringGetName方法。且对父类不影响。说白了,就是这里不是重载,而是隐藏,隐藏父类的同名同参方法。
既然提到这个dll,我提醒一下,这个东西从2010年微软就提示这个工具过期了,建议使用Oracle自己的ODP。所以,建议换成Oracel.ManagedDataAccess.Client.dll。因为System.Data.OracleClient就是一个中间件,帮助调用本地的Oracle客户端,这将导致客户端的位数版本等都会引用到托管代码。而且在更新方面,System.Data.OracleClient已经停止更新,支持的功能也少。
隐藏?没听说过哈,可以写个小demo给我看看么,感谢~~
@小小乌龟把头藏:
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 }
@小小乌龟把头藏: 再不明白你就想,虚方法用override重写,普通方法用new。区别就是父类的虚方式是无法被执行的,在被重写的时候,执行时执行的是子类的方法。而且因为普通方法是可以执行的,所以父类的普通方法被执行时执行的是父类的普通方法,在这里的面向对象,C#要求的比java高。
@ensleep: 谢谢