abstract&virtual&override

来源:互联网 发布:大学物理实验报告数据 编辑:程序博客网 时间:2024/06/05 13:32

  一直以来,对这三个关键字都没有完全的了解,今天加会班,写篇文章来梳理清楚.吃得好饱,哈哈.

namespace test{    abstract public class Thinking    {    }    class Program    {        static void Main()        {            //  错误,无法创建抽象类的实例.            Thinking thingking = new Thinking();        }    }}
namespace test{    abstract public class Thinking    {        //  可以定义抽象类的实例成员,继承自该抽象类的子类继承这些实例.        private int timePast;        public int TimePast        {            get            {                return timePast;            }            set            {                timePast = value;            }        }        public void Do()        {            Console.WriteLine("I'm thingking...");        }    }    public class Man : Thinking    {    }    class Program    {        static void Main()        {            Man me = new Man();            me.Do();            me.TimePast = 5;        }    }}
namespace test{    abstract public class Thinking    {        //  无法定义抽象类的抽象成员.        abstract public void Do()        {            Console.WriteLine("I'm thingking...");        }    }}
namespace test{    abstract public class Thinking    {        //  可以在抽象类中使用virtual关键字来定义方法.        virtual public void Do()        {            Console.WriteLine("I'm thingking...");        }    }    public class Man : Thinking    {        //  在该类中不重新定义Do方法,该类将包含Thingking的Do方法.    }    class Program    {        static void Main()        {            Man me = new Man();            me.Do();        }    }}
namespace test{    abstract public class Thinking    {        //  可以在抽象类中使用virtual关键字来定义方法.        virtual public void Do()        {            Console.WriteLine("I'm thingking...");        }    }    public class Man : Thinking    {        //  直接定义Do,将隐藏Thingking类中的Do方法.        public void Do()        {            Console.WriteLine("I'm touching myself...");        }    }    class Program    {        static void Main()        {            Man me = new Man();            me.Do();        }    }}

namespace test{    abstract public class Thinking    {        //  可以在抽象类中使用virtual关键字来定义方法.        virtual public void Do()        {            Console.WriteLine("I'm thingking...");        }    }    public class Man : Thinking    {        //  直接定义Do,将隐藏Thingking类中的Do方法.        public void Do()        {            //  可以显示使用base.Do完成对Thingking中Do方法的调用.            base.Do();            Console.WriteLine("I'm touching myself...");        }    }    class Program    {        static void Main()        {            Man me = new Man();            me.Do();        }    }}
namespace test{    abstract public class Thinking    {        //  可以在抽象类中使用virtual关键字来定义方法.        virtual public void Do()        {            Console.WriteLine("I'm thingking...");        }    }    public class Man : Thinking    {        //  显示地对Thingking类中的Do方法进行追加定义.        virtual public void Do()        {            //  可以显示使用base.Do完成对Thingking中Do方法的调用.            base.Do();            Console.WriteLine("I'm touching myself...");        }    }    class Program    {        static void Main()        {            Man me = new Man();            me.Do();        }    }}
namespace test{    abstract public class Thinking    {        //  可以在抽象类中使用virtual关键字来定义方法.        virtual public void Do()        {            Console.WriteLine("I'm thingking...");        }    }    public class Man : Thinking    {        //  重新定义Thingking类中的Do方法.        override public void Do()        {            //  亦可使用base.Do完成对Thingking类中Do方法的显示调用.            base.Do();            Console.WriteLine("I'm touching myself...");        }    }    class Program    {        static void Main()        {            Man me = new Man();            me.Do();        }    }}
namespace test{    public class Thinking    {        //  无法在非抽象类中定义抽象成员.        abstract public void Do();    }}
例子举完了.说几句.

abstract用来定义抽象类,以及在抽象类中定义抽象方法.virtual用来对父类同名方法的追加定义,override完成对父类同名方法的重新定义.
其实并不难,并且我捋顺得并不清晰.也许吧,不害怕它就好了,没有想象中那么可怕.确实是这样,恐惧比什么都可怕.
这两天好累的,尽快地融入项目,看代码,照猫画虎,学到了不少.加油吧,我心态一直不错,并且一直坚持着.
为什么总是借机会说点心里话呢?呵呵.

原创粉丝点击