初学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
- 初学C#_9
- c++_9: 内存管理
- 初学C#
- 初学C
- 初学C
- 初学C
- 初学C
- 初学C
- 初学C
- 初学C
- 初学C
- 初学C
- 初学C
- 4_9
- 工作总结_9
- [C++_9]多态_虚函数(表)_纯虚函数
- 初学c 多指教
- 初学C语言
- 用到的几个gdb case
- Java系列-类与类之间的六种关系
- mac+apache+django+wsgi
- 读《数据结构学习指导和习题解答》(C++语言版)有感。
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- 初学C#_9
- RESTful入门——转自http://lavasoft.blog.51cto.com/62575/229206/
- poj 3190 Stall Reservations
- 【SICP练习】120 练习3.51
- java.lang.IllegalArgumentException: Wrong FS: hdfs://localhost:9000/out, expected: file:///
- 最近开发中遇到的问题汇总
- 判断1000--2000年之间的闰年
- java路径两种写法"/"和"\\"
- 自考路之计算机系统