我有以下抽象基类:
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);
}
}
编译......它有效!
答案 0 :(得分:1)
您可以查看C#语言规范§7.5.3(重载)
简单地说,我认为覆盖关键字用于重新定义实现,而不是参数。你不能覆盖args, args必须与抽象相同(我在这里考虑liskov替换原则应用程序)。
Params完全是一种语法糖,它完全等同于一个简单的数组。在某些情况下调用更容易,避免阵列转换; compilator在方法调用期间为您工作。
请注意,在C#6中,params将与IEnumerable兼容。