概述:一个不与具体事物相联系的类,只是表达一种抽象的概念,仅作为其派生类的一个基类,提供多个派生类可共享的基类的公共定义。
声明:访问修饰符 abstract class 类名:基类或接口
{ //类成员 }
说明:除abstract 、class 和类名外,其他都可省略
与非抽象类的区别:抽象类不能直接实例化;抽象类可包含抽象成员,非抽象类中不可包含抽象成员;抽象类不能被密封。
抽象方法:抽象类在声明方法时加上abstract关键字,且只是声明引入了一个新方法,而不提供该方法的实现,所以方法体中只有一个分号
必须声明在抽象类中,不能使用virtual、static、private修饰符
注意:当从抽象类中派生一个非抽象类时,需要在非抽象类重写抽象方法,以提供具体的实现,使用override关键字
实例:
namespace _抽象类与抽象方法.cs
{
public abstract class myClass
{
string id = "";
public string Id //编号属性及其实现
{ get { return id; } set { id = value; } }
string name = "";
public string Name //姓名属性及其实现
{ get { return name; } set { name = value; }
}
public abstract void ShowInfo(); //抽象方法,用来输出信息 }
public class DriveClass : myClass //继承抽象类
{
public override void ShowInfo() //重写抽象类中输出信息的方法
{ Console.WriteLine(Id +""+Name); }
class Program
{
static void Main(string[] args)
{
DriveClass driveclass = new DriveClass();
myClass myclass = driveclass;
myclass.Id = "BH0001";
myclass.Name = "TM";
myclass.ShowInfo();
Console.ReadKey();
}
}
}
抽象类与接口:
抽象类和接口都包含可以有派生类继承的成员,它们都不能直接实例化,但可以声明它们的变量。
抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构;接口主要用于类,这些类在基础水平上有所不同,
但任可以完成某些相同的任务。
区别:派生类只能继承一个基类即只能继承一个抽象类,但可以继承任意多个接口
抽象类中可以定义成员的实现,但接口不可以
抽象类中可包含字段、构造函数、析构函数、静态成员或常量等,接口不可以
接口中的成员必需是共有的,但抽象类可以是其他的