c#方法签名上的参数不会破坏重写/实现
本文关键字:重写 实现 参数 方法 | 更新日期: 2023-09-27 18:03:36
我有以下抽象基类:
public abstract class HashBase
{
public abstract byte[] Hash(byte[] value);
}
然后我继续实现那个类:
public class CRC32Hash : HashBase
{
public override byte[] Hash(params byte[] value)
{
return SomeRandomHashCalculator.Hash(value);
}
}
编译…而且很有效!
- 这是建议还是会导致"邪恶"代码?"参数"是一种语法糖吗?
你可以看看c#语言规范§7.5.3(重载)
简单地说,我认为override关键字用于重新定义实现,而不是参数。你不能覆盖参数,参数必须与抽象相同(我在这里考虑的是liskov替代原则的应用)。
Params完全是一个合成糖,它严格等同于一个简单数组。它只是在某些情况下更容易调用,避免了数组强制转换;编译器在方法调用期间为您完成工作。
注意,在c# 6中,params将与IEnumerable兼容。