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 cjavapy
{//定义一个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 = "cjavapy";   
            Console.WriteLine("{0}  {1} ",stu.Name,stu.Age); //读属性  
        }  
    }  
}

3、抽象方法

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace cjavapy
{//定义一个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 = "cjavapy";
            stu.Say();
        }
    }
}

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

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

推荐阅读
cjavapy编程之路首页