简介
在 C# 中,virtual 和 abstract 关键字都用于面向对象编程中的继承和多态,它们主要用于方法、属性和事件的定义,但在用法上存在一些重要的区别。
virtual 关键字
virtual 表示可重写的方法,但可以提供默认实现,派生类可以选择是否重写。
使用规则
- 只能在类成员(方法、属性、事件)上使用,不能用于字段。
- 必须有默认实现,子类可以选择是否
override进行重写。 - 在基类中调用时,调用的是基类的方法,但如果子类重写了,则会调用子类的实现(运行时多态)。
- 不能用于
static方法,但可以用于属性和事件。
示例:virtual 方法
using System;
class BaseClass
{
public virtual void ShowMessage()
{
Console.WriteLine("基类的 ShowMessage() 方法");
}
}
class DerivedClass : BaseClass
{
public override void ShowMessage()
{
Console.WriteLine("子类的 ShowMessage() 方法");
}
}
class Program
{
static void Main()
{
BaseClass obj1 = new BaseClass();
obj1.ShowMessage(); // 输出: 基类的 ShowMessage() 方法
DerivedClass obj2 = new DerivedClass();
obj2.ShowMessage(); // 输出: 子类的 ShowMessage() 方法
BaseClass obj3 = new DerivedClass();
obj3.ShowMessage(); // 输出: 子类的 ShowMessage() 方法 (运行时多态)
}
}
virtual 属性
class Animal
{
public virtual string Name {
get; set; } = "Unknown Animal";
}
class Dog : Animal
{
public override string Name {
get; set; } = "Dog";
}
class Program
{
static void Main()
{
Animal a = new Dog();
Console.WriteLine(a.Name); // 输出: Dog
}
}
abstract 关键字
abstract 表示抽象成员,没有实现,必须在派生类中重写。它只能出现在 abstract 类中。
使用规则
- 只能在
abstract类中使用,不能用于 <

最低0.47元/天 解锁文章

2469

被折叠的 条评论
为什么被折叠?



