代码之家  ›  专栏  ›  技术社区  ›  randomDud

C#从另一个接口重写接口方法

  •  0
  • randomDud  · 技术社区  · 2 年前

    假设我有接口

    public interface IRepository
    {
        string GetValue();
    }
    

    然后我需要扩展这个接口,以便它支持缓存

    public interface ICachedRepository: IRepository
    {
        void SetCache(string value);
    
        string GetValue(bool ignoreCache = false);
    }
    

    如你所见,我想覆盖 GetValue 方法,使其 ignoreCache 论点但看起来我重载了方法,而不是重写它。有没有办法完全覆盖 方法 ,以便实现 ICachedRepository 无需实施 方法 从…起 IRepository ?

    1 回复  |  直到 2 年前
        1
  •  0
  •   PMF    2 年前

    如果要重写方法,则无法更改签名,因此 GetValue(bool) 创建重载,而不是重写(该方法具有默认参数不会产生任何影响)。 但是 你的 ICachedRepository 使生效 GetValue() 继承基本接口时。

    为接口编写实现时,必须指定两种方法:

    public class RepositoryImplementation : ICachedRepository
    {
        public string GetValue() { GetValue(false) }
        public string GetValue(bool ignoreCache) { ... }
        public void SetCache(string value) {...}
    }
    

    这个 GetValue() 方法是的一部分 ICachedRepository公司 ,即使未在中声明重写 ICachedRepository公司 . 在接口中声明重写实际上是非法的。

    旁注:我将从中删除默认参数规范 GetValue(bool ignoreCache = false) 因为当另一个没有参数的重载存在时,会很混乱。相反,请确保 GetValue() GetValue(false) 执行相同的操作。