读书人

隐藏基类方法疑问与调用方法(this)方

发布时间: 2012-01-19 00:22:28 作者: rapoo

隐藏基类方法疑问与调用方法(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();        }    } 

读书人网 >C#

热点推荐