接口定义能力,抽象类封装共性。C#中接口用于规范行为契约,支持多继承,适用于跨类型共享功能;抽象类提供部分实现,仅支持单继承,适合共性逻辑复用。
在 C# 中,接口(Interface)和抽象类(Abstract Class)是实现多态和代码复用的重要机制。它们都用于定义行为契约,但使用场景和规则有所不同。下面详细介绍如何实现接口和抽象类,并说明它们的区别与适用情况。
接口定义了一组方法、属性、事件或索引器的签名,不包含实现。任何类或结构实现接口时,必须提供这些成员的具体实现。
定义接口:
public interface IRunnable{ void Run(); int Speed { get; set; }}实现接口:
public class Car : IRunnable{ public int Speed { get; set; } public void Run()
{ Console.WriteLine($"Car is running at {Speed} km/h"); }}
一个类可以实现多个接口,例如:
public class Car : IRunnable, IStoppable接口中的所有成员默认都是公共的、抽象的,不能有访问修饰符,也不能包含字段(除常量外)。
抽象类是不能被实例化的类,通常用于作为基类提供通用功能。它可以包含抽象成员(无实现)和具体实现的成员。
定义抽象类:
public abstract class Vehicle{ public string Brand { get; set; }// 抽象方法,子类必须实现 public abstract void Start();
// 虚方法,子类可选择重写 public virtual void Stop() { Console.WriteLine("Vehicle stopped."); }}
继承并实现抽象类:
public class Motorcycle : Vehicle{ public override void Start() { Console.WriteLine("Motorcycle engine started."); }}抽象类允许包含字段、构造函数、访问修饰符,并且只能单继承。
理解何时使用接口,何时使用抽象类,对设计良好的面向对象系统至关重要。
基本上就这些。掌握接口和抽象类的使用,能让你的 C# 程序更具扩展性和维护性。关键是理解它们的设计意图:接口定义能力,抽象类封装共性。