方法签名上的C#参数不会破坏覆盖/实现

时间:2014-05-16 13:54:03

标签: c# override abstract-class params

我有以下抽象基类:

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);
    }
}

编译......它有效!

  1. 这是建议还是导致"邪恶"码?
  2. 是" params"一种语法糖?

1 个答案:

答案 0 :(得分:1)

您可以查看C#语言规范§7.5.3(重载)

简单地说,我认为覆盖关键字用于重新定义实现,而不是参数。你不能覆盖args, args必须与抽象相同(我在这里考虑liskov替换原则应用程序)。

Params完全是一种语法糖,它完全等同于一个简单的数组。在某些情况下调用更容易,避免阵列转换; compilator在方法调用期间为您工作。

请注意,在C#6中,params将与IEnumerable兼容。