隐藏基类方法疑问与调用方法(this)方法疑问
两个问题-问题1:
隐藏基类方法我不明白。看代码
- C# code
class MyBase { public void Print() { Console.WriteLine("基类Pint()方法"); } } class MyClass : MyBase { new public void Print() { Console.WriteLine("继承类隐藏后的Pint()方法"); } } class Program { static void Main(string[] args) { MyClass myObj = new MyClass(); myObj.Print(); Console.ReadKey(); } }
这时的返回结果是:"继承类隐藏后的Pint()方法",为什么不是"基类Pint()方法".
书中说到:基类的方法不必是虚拟的,但结果是一样的,只需修改上面代码中的一行即可。对于基类的虚拟方法和非虚拟方法来说。基结果如下:"基类Pint()方法".
问题2:
调用本类中的方法使用this修饰符。看代码
- C# code
class MyBase { //................ } class MyClass : MyBase { public void thisWrite() { Console.WriteLine("调用thisWrite()方法"); } public void myWrite() { MyClass myObj = new MyClass(); myObj.thisWrite(this); } } class Program { static void Main(string[] args) { MyClass myObj = new MyClass(); myObj.thisWrite(); } }
提示错误:错误thisWrite”方法没有采用“1”个参数的重载
在myWrite()方法中实例化。感觉怪怪的。实便的还是此方法所在的类。又在Program类中再次实例化。上面的代码是我根据书。理解所写。
请朋友帮助分析讲解下。谢谢。
[解决办法]
在第一段代码中楼主使用的new关键字创建子类方法
并未用override关键字来重写父类的方法
而且楼主在实例化对象的时候并未采用多态形式
一下是修改结果
- C# code
class MyBase { public void Print() { Console.WriteLine("基类Pint()方法"); } } class MyClass : MyBase { public override void Print() { Console.WriteLine("继承类隐藏后的Pint()方法"); } } class Program { static void Main(string[] args) { MyBase myObj = new MyClass(); myObj.Print(); Console.ReadKey(); } }
[解决办法]
老大我水平有限,说不清楚,我还没看明白你说的是什么问题。
你第一个问题想调用基类的方法,但是你两个方法名字写的一样不好搞,弱国像你那样写还想调用基类方法
的话,你创建对象的时候这样写MyBase myObj = new MyClass();
然后你在调用myObj.Print(); 就是基类的方法了
你看我这样写你明白否
- C# code
class MyBase { public MyBase() { Console.Write("基类构造方法!"); } public void Baserint() { Console.Write("基类的方法!"); } } class MyClass:MyBase { public MyClass() { Console.Write("子类构造方法!"); } public void ClassPrint() { Console.Write("子类的方法!"); } } class Program { static void Main(string[] args) { MyClass myObj = new MyClass(); myObj.Baserint(); myObj.ClassPrint(); Console.ReadKey(); } }