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

方法签名上的C#参数不';不要破坏覆盖/实现,c#,overriding,abstract-class,params,C#,Overriding,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

我有以下抽象基类:

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);
    }
}
编译…并且它工作

  • 这是建议的还是会导致“邪恶”代码
  • “params”是一种语法糖吗
  • 您可以查看C语言规范§7.5.3(过载)

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

    Params完全是一个syntaxic sugar,它严格等价于一个简单数组。它只是在某些情况下更容易调用,避免了数组强制转换;编译器在方法调用期间为您执行此操作

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

    “params”是一种语法糖吗?“是的!如果您传递一个数组,它将使用该数组;如果您传递一些可能是数组元素的内容,它将使这些内容成为数组。所以它是兼容的;我不知道是否建议这样做。