接口继承过载
本文关键字:继承 接口 | 更新日期: 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);
使用或不使用强制转换,即使otherThing
和myThing
是实现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) ;
}