开发手册 欢迎您!
软件开发者资料库

C# 面向对象 抽象类、抽象属性和抽象方法

C# 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。本文主要介绍C# 面向对象 抽象类、抽象属性和抽象方法

 1、抽象类

在类的继承中,如果一个个新的子类被定义,子类变得越来越具体,父类变得更加一般和通用,类的设计应该保证父子类能够共享特征,有时将父类设计得非常抽象,使得父类没有具体的实现,这样的类叫做抽象类;一般当我们设计一个类,不需要创建此类的实例时,可以考虑将该类设置成抽象类,让其子类实现这个类的抽象方法。C#允许把类、属性和函数声明为abstract。抽象类不能实例化,抽象类可以包含普通属性和抽象属性,普通函数和抽象函数。抽象函数就是只有函数定义没有函数体的函数。显然,抽象函数本身也是虚拟(virtual)的。

例如,

// 鸟的抽象类abstract class Bird // 含有抽象属性和方法,就一定是抽象类{// 鸟速度的属性public double Speed { get; set; }// 鸟体重的属性    public abstract double Weight { get; set; }    // 鸟飞翔的抽象方法     public abstract void Fly(); }

2、抽象属性

抽象类可拥有抽象属性,这些属性应在派生类中被实现。例如,

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;  namespace wonhero{//定义一个person抽象类      abstract class Person      {//定义抽象属性          public abstract string Name          {//读写              get;              set;          }          public abstract uint Age          {//只读              get;          }      }      //定义派生类      class Student : Person      {          private string name;          private uint age=10;          //实现抽象属性          public override string Name          {              get              {                  return name ;              }              set              {                  name=value;              }          }          public override uint Age          {              get { return age; }          }      }      class Program      {          static void Main(string[] args)          {              Student stu = new Student();              stu.Name = "wonhero";               Console.WriteLine("{0}  {1} ",stu.Name,stu.Age); //读属性          }      }  }

3、抽象方法

只有抽象类可以有抽象方法,不过抽象类可以有具体方法。如果把一个抽象方法放在一个类中,就必须标识这个类为抽象类。例如,

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace wonhero{//定义一个person抽象类      abstract class Person    {        //定义抽象属性          public abstract string Name        {//读写              get;            set;        }        public abstract uint Age        {//只读              get;        }        public abstract void Say();    }    //定义派生类      class Student : Person    {        private string name;        private uint age = 10;        //实现抽象属性          public override string Name        {            get            {                return name;            }            set            {                name = value;            }        }        public override uint Age        {            get { return age; }        }        public override void Say()        {            Console.WriteLine(this.Name+" is very good!!!");        }    }    class Program    {        static void Main(string[] args)        {            Student stu = new Student();            stu.Name = "wonhero";            stu.Say();        }    }}

使用抽象类和抽象方法使用接口和实现分离,更好地降低代码之间的耦合程序,更方便配合及团队开发也更加地规范。

注意:抽象也可以通过Interface(接口)实现。