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#方法签名上的参数不会破坏重写/实现

你可以看看c#语言规范§7.5.3(重载)

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

Params完全是一个合成糖,它严格等同于一个简单数组。它只是在某些情况下更容易调用,避免了数组强制转换;编译器在方法调用期间为您完成工作。

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