在另一个接口的实现中调用接口的特定后代
本文关键字:接口 后代 调用 实现 另一个 | 更新日期: 2023-09-27 18:13:19
我定义了一个接口iClass
。接口中的一个方法接受另一个接口iObject
作为参数。
在iClass
的一个特定实现中,我需要该方法采取iObject
, ObjectImplementation
的特定实现-但c#告诉我,我需要按原样实现该方法。
为什么会这样?ObjectImplementation
不是iObject
的一个实例吗?我该怎么解决这个问题?我试着用一个抽象类代替,我陷入了同样的混乱。
public interface iClass {
bool SomeMethod(iObject object);
}
public interface iObject {
... // some methods here
}
public ObjectImplementation : iObject {
... // some method implementations here
}
public ClassImplementation : iClass {
public bool SomeMethod(ObjectImplementation object) // <- C# compiler yells at me
{
}
}
合约明确指出该方法需要iObject
。ObjectImplementation
是实现该接口的一个类。但可能还有其他的。iClass
的契约声明所有这些实现都是有效的参数。
如果您确实需要将参数约束为ObjectImplementation
,请考虑使用泛型接口:
public interface IClass<T> where T : IObject
{
bool SomeMethod(T item);
}
public ClassImplementation : IClass<ObjectImplementation>
{
public bool SomeMethod(ObjectImplementation item)
{
}
}
将iObject保留为参数是一种方法,这也应该起作用:
public interface iClass {
bool SomeMethod(iObject obj);
}
public interface iObject {
}
public class ObjectImplementation : iObject {
}
public class ClassImplementation : iClass {
public bool SomeMethod(iObject obj)
{
return false;
}
}