在另一个接口的实现中调用接口的特定后代

本文关键字:接口 后代 调用 实现 另一个 | 更新日期: 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
    {
    }
}

在另一个接口的实现中调用接口的特定后代

合约明确指出该方法需要iObjectObjectImplementation是实现该接口的一个类。但可能还有其他的。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;
    }
}