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

时间:2013-05-14 07:13:45

标签: c# inheritance interface abstract

我定义了一个接口iClass。接口中的一个方法将另一个接口iObject作为参数。

iClass的一个特定实现中,我需要使用该方法来实现iObjectObjectImplementation的特定实现 - 但C#告诉我需要按原样实现该方法。 / p>

这是为什么? 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
    {

    }
}

2 个答案:

答案 0 :(得分:2)

合同明确规定该方法需要iObjectObjectImplementation是实现此接口的一个类。但可能还有其他人。 iClass的合同规定所有这些实现都是有效的参数。

如果您确实需要将参数约束为ObjectImplementation,请考虑使用通用接口:

public interface IClass<T> where T : IObject
{
    bool SomeMethod(T item);
}

public ClassImplementation : IClass<ObjectImplementation>
{
    public bool SomeMethod(ObjectImplementation item)
    {

    }
}

答案 1 :(得分:0)

将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;
    }
}