c#虚方法与抽象方法
时间: 2023-11-24 11:52:46 浏览: 86
C#中的虚方法和抽象方法的运用
C#中的虚方法和抽象方法都是实现多态性的重要手段,它们的区别在于抽象方法必须在派生类中被重写并提供具体的实现,而虚方法则可以在派生类中被重写也可以不被重写。下面是两者的具体介绍:
1. 虚方法(Virtual Methods):
虚方法是指在基类中声明并提供默认实现的方法,它可以在派生类中被重写。通过使用关键字"virtual",可以标记一个方法为虚方法。虚方法在基类中可以包含方法体,也可以不包含方法体。如果在派生类中重写了虚方法,那么在派生类对象上调用该方法时,实际调用的是派生类中的重写方法。
下面是一个虚方法的例子:
```csharp
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle");
}
}
class Square : Shape
{
// 不重写基类中的虚方法
}
class Program
{
static void Main(string[] args)
{
Shape s1 = new Circle();
Shape s2 = new Square();
s1.Draw(); // 输出:Drawing a circle
s2.Draw(); // 输出:Drawing a shape
}
}
```
2. 抽象方法(Abstract Methods):
抽象方法是指在基类中声明但没有提供实现的方法。抽象方法必须在派生类中被重写并提供具体的实现。通过使用关键字"abstract",可以标记一个方法为抽象方法。抽象方法在基类中只能进行声明,不能包含方法体。
下面是一个抽象方法的例子:
```csharp
abstract class Shape
{
public abstract void Draw();
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle");
}
}
class Square : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a square");
}
}
class Program
{
static void Main(string[] args)
{
Shape s1 = new Circle();
Shape s2 = new Square();
s1.Draw(); // 输出:Drawing a circle
s2.Draw(); // 输出:Drawing a square
}
}
```
阅读全文