我想做的是:
public interface IRemove<out T>
{
T Remove();
bool IsCompleted { get; }
}
public interface IRemoveInfinite<out T> : IRemove<T>
{
bool IsCompleted { get { return false; } }
}但这是无效的,因为我不能将实现放在C#接口中。
鉴于以下限制因素:
IRemoveInfinite也是一个自动的IRemove。IRemoveInfinite,当将IsCompleted设置为false时,IRemove将其设置为false。我如何编码这样的接口或以其他方式封装它?
发布于 2018-03-20 02:07:16
接口是契约声明,但您尝试将此契约的实现插入其中。
也许您应该使用抽象类来定义行为:
public interface IRemove<out T>
{
T Remove();
bool IsCompleted { get; }
}
public abstract class RemoveInfinite<T> : IRemove<T>
{
public bool IsCompleted
{
get { return false; }
}
public abstract T Remove();
}如果不能使用继承,请使用类的组合:
public class ClassRemove : RemoveInfinite<object>
{
public override object Remove()
{
return new object();
}
}
public class ClassA : SomeBaseClass, IRemove<object>
{
private RemoveInfinite<object> removeInfinite = new ClassRemove();
public object Remove()
{
return removeInfinite.Remove();
}
public bool IsCompleted
{
get { return removeInfinite.IsCompleted; }
}
}https://stackoverflow.com/questions/49375116
复制相似问题