tom*_*szs 4 c# design-patterns interface hierarchy
我正在为新项目编写接口,并希望得到一些建议.
我有一个具有子类的类,它有一个子类.这个类的树是这样的:
Class Car
{
Wheels Wheel;
}
Class Wheels
{
Rims Rim;
}
Run Code Online (Sandbox Code Playgroud)
因此,为了简化:一辆车有一个车轮,一个车轮有一个车轮.(不能弥补其他更好的例子,对不起).
所以我想在我的ICar,IWheels和IRims的接口实现中强制这个层次结构.
所以我做了这样的事情(在C#中):
ICar
{
IWheels Wheel;
}
IWheels
{
IRims Rim;
}
Run Code Online (Sandbox Code Playgroud)
我有一个错误,我不能在接口实现中有字段.所以这开始我的事情可能是错误的界面设计.我想强制接口实现来实现这种层次结构.但是,如果按照设计模式和最佳实践,它应该以其他方式完成吗?
您能告诉我如何设计我的系统,以便强制对象实现这种层次结构吗?
也许在我的问题中有一些不精确的东西,或者我错过了一些重要信息.如果是,请在评论中提问.
Fre*_*els 10
在您的界面中,您必须明确Wheels应该是ICar的属性,因为您无法声明接口实现应该具有哪些字段.(字段是内部工作,因此接口不应该知道它).
interface ICar
{
IWheels Wheels
{
get;
}
}
Run Code Online (Sandbox Code Playgroud)
您不能在接口中指定字段(并且您不应该 - 这是一个实现决策),但您可以指定一个属性:
public interface ICar
{
IWheels Wheel { get; set; }
}
public interface IWheels
{
IRims Rim { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你可能只想把getter放在接口中 - 在接口中包含一个setter有点不寻常:
public interface ICar
{
IWheels Wheel { get; }
}
public interface IWheels
{
IRims Rim { get; }
}
Run Code Online (Sandbox Code Playgroud)
(如果你想覆盖现有的(或抽象的)属性只有一个getter来添加一个setter,那就有些奇怪了,但我相信也可以用setter实现一个"getter-only"接口.)