接口继承过载

本文关键字:继承 接口 | 更新日期: 2023-09-27 18:17:11

我正在处理一个接口如下:

public interface ISomething
{
    ...many auto-props, 
    void SetValues(ISomething thing) 
}

现在,我不拥有这个接口,但我想用更多的属性来扩展它:

public interface ISomethingMoreSpecific : ISomething
{ 
    ...existing + my props, 
    void SetValues(ISomething thing)
}

在类实现ISomethingMoreSpecific中,我实现了一个重载,它接受派生接口并处理我的道具和基本接口属性。

public void SetValues(ISomethingMoreSpecific specificThing) 
{
    ...set my props and base props
}

调用代码执行以下操作:

myThing.SetValues((ISomethingMoreSpecific)otherThing);

使用或不使用强制转换,即使otherThingmyThing是实现ISomethingMoreSpecific的具体类型,该方法也不会分派给我的过载。我猜我忽略了一些简单的东西,但它是什么?

接口继承过载

Include

void SetValues(ISomethingMoreSpecific specificThing);

ISomethingMoreSpecific。

ISomethingMoreSpecific中再次出现void SetValues(ISomething thing)。如果您打算隐藏它,那么使用new关键字。如果您不想隐藏,您需要将ISomethingMoreSpecific中的void SetValues(ISomething thing)更改为void SetValues(ISomethingMoreSpecific)。下面是您打算隐藏的代码,它确实可以使用强制转换。即使你不隐藏它,即不使用new关键字。它的工作原理。

public class Program
{
    public void Main(string[] args)
    {
        MyThing a = new MyThing();
        MyThing b = new MyThing();
        a.SetValues(b);//calls more specific
        a.SetValues((ISomething)b);//calls just the thing
    }   
}

public class MyThing : ISomethingMoreSpecific
{
    public void SetValues(ISomethingMoreSpecific specificThing)
    {
        Console.WriteLine ("more specific");
    }
    public void SetValues(ISomething thing)
    {
        Console.WriteLine ("just the thing");
    }
}
public interface ISomethingMoreSpecific : ISomething
{ 
    //...existing + my props, 
    new void SetValues(ISomething thing);
}
public interface ISomething
{
    //...many auto-props, 
    void SetValues(ISomething thing) ;
}