声明特性
- 虚方法:在基类的方法声明前使用
virtual
关键字。例如:
public class BaseClass
{
public virtual void VirtualMethod()
{
Console.WriteLine("This is a virtual method in BaseClass.");
}
}
- 抽象方法:在抽象类中使用
abstract
关键字声明,且方法没有实现体。例如:
public abstract class AbstractClass
{
public abstract void AbstractMethod();
}
- 接口方法:在接口中定义方法,接口方法默认是
public
和 abstract
的,无需额外修饰符。例如:
public interface IMyInterface
{
void InterfaceMethod();
}
实现特性
- 虚方法:基类中有默认实现,派生类可选择重写。
- 抽象方法:抽象类中无实现,必须在非抽象的派生类中实现。
- 接口方法:接口本身无实现,实现类必须为所有接口方法提供实现。
重写要求
- 虚方法:派生类使用
override
关键字重写,重写方法的访问修饰符可以与基类不同,但访问级别不能低于基类方法。
public class DerivedClass : BaseClass
{
public override void VirtualMethod()
{
Console.WriteLine("This is the overridden virtual method in DerivedClass.");
}
}
- 抽象方法:派生类必须使用
override
关键字重写。
public class ConcreteClass : AbstractClass
{
public override void AbstractMethod()
{
Console.WriteLine("This is the implementation of abstract method in ConcreteClass.");
}
}
- 接口方法:实现类必须实现接口方法,实现方法必须是
public
的。
public class ImplementingClass : IMyInterface
{
public void InterfaceMethod()
{
Console.WriteLine("This is the implementation of interface method in ImplementingClass.");
}
}
使用场景特性
- 虚方法:适用于基类有默认实现,而派生类可能需要根据自身情况对该实现进行修改的场景。例如,在图形绘制系统中,基类
Shape
有一个 Draw
虚方法,不同的形状如 Circle
、Rectangle
可以重写 Draw
方法来实现自己的绘制逻辑。
- 抽象方法:当基类无法提供有意义的默认实现,且所有派生类都必须提供自己的实现时使用。例如,在一个游戏角色系统中,抽象类
Character
可能有抽象方法 Attack
,具体的角色类如 Warrior
、Mage
必须实现 Attack
方法来定义自己的攻击行为。
- 接口方法:用于实现多态性,当多个不相关的类需要实现一组相同的行为时使用。例如,
Bird
类和 Plane
类都可以实现 IFlyable
接口,以提供 Fly
方法的实现,这样它们都具有飞行的行为,尽管它们的继承体系不同。