初学C#_9

来源:互联网 发布:雷达图制作软件 编辑:程序博客网 时间:2024/05/01 23:49

本篇主要简单说一下C#的继承、重写、多态和抽象,它和java还是比较相似的。

继承就是一个类可以使用基本类的属性、方法和事件,而关于重写、多态与抽象的概念,可以参考——http://blog.csdn.net/u012421456/article/details/36903475


继承

在C#中,继承所需要的是 :(等同于java中extends)


例1:

using System; namespace daxia{    class Program : Test    {        static void Main(string[] args)        {            Program pro = new Program();            //pro.Test0();            Console.WriteLine("父类中的字段:public字段:{0}, protected字段:{1}, " +                "\ninternal字段:{2}, protect internal字段:{3},",pro.i,pro.f,pro.s,pro.t);            Console.WriteLine("注意:父类中的private属性无法直接访问!");            Console.ReadLine();        }         public Program()    //子类的构造函数        {            Console.WriteLine("调用子类的构造函数!");            Console.WriteLine("\n可以发现,子类实例化时,先调用基类的构造函数,后调用子类的构造函数,多重继承也是如此!");        }    }     public class Test    {        public int i = 0;        protected float f = 0.618f;        internal string s = "细雨飘";        protected internal char t = 'T';        private bool b = false;    //private属性只能在本类中直接访问,子类是无法直接访问的         public Test() //构造器        {            Console.WriteLine("调用基类的构造函数!");        }         private void Test0()        {            Console.WriteLine("调用基类的普通函数!");        }    }}
输出结果为:


 

重写

重写的属性和方法用于替换在派生类中不适合的继承的属性或方法,其使用的关键字是override


例2:

using System; namespace daxia{    class Program    {        static void Main(string[] args)        {            Program pro = new Program();            pro.lyric = " 叹只叹十年冰封 ";             Console.WriteLine("{0}", pro);             Console.ReadLine();        }         private string mylyric;        public string lyric        {            get { return mylyric; }            set { mylyric = value; }        }         public override string ToString()        {            Console.WriteLine("重写了系统的ToString方法!");            return mylyric + " 恨只恨苍天有负 ";        }    }}
输出结果为:


 

多态

简单地说就是可以通过调用名字相同的方法实现不同的功能


例3:

using System; namespace daxia{    class Program    {        static void Main(string[] args)        {            DrawingObject[] draobj = new DrawingObject[4];  //用数组存放各个派生类的实例            draobj[0] = new Line();            draobj[1] = new Circle();            draobj[2] = new Square();            draobj[3] = new DrawingObject();             foreach(DrawingObject drob in draobj)  //通过循环,调用相同名字的方法,实现了不同的功能            {                drob.Draw();            }             Console.ReadLine();        }    }     public class DrawingObject  //基类    {        public virtual void Draw() //这是定义了一个虚方法,它可以供继承该类的派生类重写        {            Console.Write("这是DrawingObject类中的语句,");            Console.WriteLine("表示一个通用的绘图对象。\n");        }    }     public class Line : DrawingObject    {        public override void Draw()   //如果不使用overoid关键字,则在主函数调用此方法时,只会调用DrawingObject中的该方法        {            Console.Write("这是Line类中的语句,");            Console.WriteLine("这里可以绘制直线。\n");        }    }     public class Circle : DrawingObject    {        public override void Draw()        {            Console.Write("这是Circle类中的语句,");            Console.WriteLine("这里可以绘制圆形。\n");          }    }     public  class Square : DrawingObject    {        public override void Draw()        {            Console.Write("这是Square类中的语句,");            Console.WriteLine("这里可以绘制正方形。\n");        }    }}
输出结果为:


 

抽象

抽象类只定义方法(或字段)名,并不会实现方法,方法的实现通过继承抽象类的子类实现,而且子类必须实现抽象类中的所有抽象方法


例4:

using System; namespace daxia{    class Program    {        static void Main(string[] args)        {            //Test_abs t = new Test_abs();  //抽象类或接口是无法创建实例的            Test0 t0 = new Test0();            t0.examp_0();            t0.examp_1();            t0.exam_2();             Test1 t1 = new Test1();            t1.examp_0();            t1.examp_1();            t1.exam_2();             Console.ReadLine();        }    }     public abstract class Test_abs  //定义一个抽象类,    {        public abstract void examp_0(); //定义一个抽象方法        public abstract void examp_1();        public void exam_2()  //抽象类中可以定义非抽象方法        {            Console.WriteLine("exam_2是抽象类中的非抽象方法\n");        }    }     public class Test0 : Test_abs    {        public override void examp_0()         {            Console.Write("这是抽象类的-Test0-子类中-examp_0-方法的语句。Test0---沉浮中以为情深缘浅\n\n");        }         public override void examp_1()        {            Console.Write("这是抽象类的-Test0-子类中-examp_1-方法的语句。Test0---渐渐地忘记忘记了时间\n\n");        }    }     public class Test1 : Test_abs    {        public override void examp_0()        {            Console.Write("这是抽象类的-Test1-子类中-examp_0-方法的语句。Test1--要分散不习惯,怎么算都太难\n\n");         }         public override void examp_1()        {            Console.Write("这是抽象类的-Test1-子类中-examp_1-方法的语句。Test1--终于明白该放手\n\n");        }    }}
输出结果为:


 

 

如有错误,欢迎指出

所有程序都是在Visual Studio 2010旗舰版下运行通过

0 0
原创粉丝点击