我定义了一个接口iClass
。接口中的一个方法将另一个接口iObject
作为参数。
在iClass
的一个特定实现中,我需要使用该方法来实现iObject
,ObjectImplementation
的特定实现 - 但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
{
}
}
答案 0 :(得分:2)
合同明确规定该方法需要iObject
。 ObjectImplementation
是实现此接口的一个类。但可能还有其他人。 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;
}
}