更改参数时覆盖方法
Override methods when altering parameters
当我更改/添加参数到方法后,我还需要使用 override
关键字吗?
例如,我将重写 ToString() 如下:
public override ToString()
{
// Implementation details
}
但是,如果我还有以下重载示例,是否需要使用override
:
public override ToString(String header)
{
// Implementation details including use of header parameter
}
事实上,甚至建议在 ToString() 中执行此操作吗?还是我应该让 ToString() 不受参数依赖?
谢谢,
杰克
不,你没有。那是重载,而不是覆盖,因此放入 override
将导致编译错误,因为找不到具有匹配签名的方法来覆盖。
覆盖用于覆盖父级上的虚拟方法class。方法的签名必须匹配:参数、return 类型等。C# 规范中的第 1.6.6.4 节有更多详细信息。
不,您不必覆盖 ToString(String header)
,因为 System.Object
(.NET 中所有类型的基础对象)不包含这样的方法。另一方面,它有一个名为 ToString
的虚方法,它不接受任何参数。
你想要的是一个同名不同签名的方法。这称为方法重载。
当我更改/添加参数到方法后,我还需要使用 override
关键字吗?
例如,我将重写 ToString() 如下:
public override ToString()
{
// Implementation details
}
但是,如果我还有以下重载示例,是否需要使用override
:
public override ToString(String header)
{
// Implementation details including use of header parameter
}
事实上,甚至建议在 ToString() 中执行此操作吗?还是我应该让 ToString() 不受参数依赖?
谢谢, 杰克
不,你没有。那是重载,而不是覆盖,因此放入 override
将导致编译错误,因为找不到具有匹配签名的方法来覆盖。
覆盖用于覆盖父级上的虚拟方法class。方法的签名必须匹配:参数、return 类型等。C# 规范中的第 1.6.6.4 节有更多详细信息。
不,您不必覆盖 ToString(String header)
,因为 System.Object
(.NET 中所有类型的基础对象)不包含这样的方法。另一方面,它有一个名为 ToString
的虚方法,它不接受任何参数。
你想要的是一个同名不同签名的方法。这称为方法重载。