- 声明一个虚方法需要用到Virtual 关键字,声明虚方法后,就可以在任何派生类中重写该方法
public class Shape
{
public virtual void Draw() =>
Console.WriteLine($"Shape with Positio and Size ");
}
- 如果实现代码只有一行,可以把virtual和表达式体一起使用。
- 属性也可以声明为virtual 对于虚属性的定义,语法与非属性相同,但是要在定义中添加关键字virtual。同时虚方法的生命也可以使用完整的属性声明。
public virtual Size Size { get; set; }
private Size _size;
public virtual Size Size
{
get => _size;
set => _size = value;
}
- C#中需方法的声明需要使用virtual来声明,使用override来重写。
方法的重写可以对基类(Object)中的ToString()方法进行重写,说明ToString()是虚方法。
public class Square : Shape
{
public override void Draw()
{
Console.WriteLine($"Square with Positio and Size");
}
public override string ToString()
{
return "这是对基类Object中的ToString方法的重写";
}
}
-
重写虚方法时,方法名和签名(签名指:一个方法中所有的参数类型、数量、返回类型)必须和虚方法相同,不然不能实现虚方法的重写。
-
字段和静态方法都不能声明为virtual,因为virtual 这个概念值时对类中的实力函数成员有意义。
public class Position
{
public int X { get; set; }
public int Y { get; set; }
public override string ToString() => $"X: {X}, Y: {Y}";
}
public class Size
{
public int Width { get; set; }
public int Height { get; set; }
public override string ToString() => $"Width: {Width},Height: {Height}";
}