C# 面向对象编程中,抽象类、抽象属性和抽象方法是重要的概念,它们用于创建通用的基类,并强制派生类实现特定的行为。抽象类提供了一个用于派生类的基类模板。抽象方法和抽象属性强制派生类实现特定的行为和数据。这些有助于提高代码的重用性、可维护性和可扩展性。本文主要介绍C# 面向对象 抽象类、抽象属性和抽象方法

 1、抽象类

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

抽象类是一个不能被实例化的类,只能被其他类继承。它通常用作基类,其中包含一个或多个抽象成员(如方法、属性、事件或索引器),或者用于定义通用的功能框架。抽象类是面向对象编程中实现多态性的关键工具之一。

例如,

// 鸟的抽象类
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(接口)实现。

推荐文档