我根据this帖子使用Field
的界面。 Field
接口继承自Style
类,而Field1,2和3继承自Field
接口。我想用一些不同类型的字段构造一个Label
对象,每个字段都有自己的样式。我不确定我是否正确地这样做,特别是因为我在尝试编译时遇到以下错误:Type 'Style' in interface list is not an interface
我的代码:
public interface Field : Style
{
int Xpos { get; set; }
int Ypos { get; set; }
int Zindex { get; set; }
}
解决此问题的最佳方法是什么?
修改
我知道从接口继承一个类是不可能的,但这里最好的方法是什么?
答案 0 :(得分:1)
查找/创建Style使用的接口,并在字段界面上继承该接口。
注意,字段接口应该命名为IField。
如果Style是你自己的班级
public interface IStyle
{
/* Style properties */
}
public class Style : IStyle
{
/* Style implementations */
}
public interface IField : IStyle
{
int Xpos { get; set; }
int Ypos { get; set; }
int Zindex { get; set; }
}
public class Field : Style, IField
{
public int Xpos { get; set; }
public int Ypos { get; set; }
public int Zindex { get; set; }
}
答案 1 :(得分:0)
我认为你在努力的地方是接口的目的。接口为类定义了实现类中公共成员和方法的存在。这允许您创建一个类型的变量(您的接口名称),然后为它分配一个实现该接口的任何实例化类的值。
就改进设计而言,可以在界面和标签类中定义三个属性(x,y,z)并实现字段界面。它没有字段列表但宁愿实现它,强制它使用draw方法获得属性x,y和z。然后,您的样式将具有一个字段列表,其中可以将实现您的字段界面的任何内容添加到此列表中。然后你可以自信地迭代这个列表并调用draw并知道它在那里,无论绘制的是什么。
答案 2 :(得分:0)
如上所述,界面无法扩展课程,因此我会尝试其他模式。我不知道它是否非常标准,但是在类似场景中,我选择了"接口+基类"图案。你定义:
这样,当您想要添加功能时,您可以选择扩展基类或从头开始实现接口。
在您的情况下,它取决于可能的扩展的方向,但示例结构可能是:
正如我所说,这只是一个例子,它取决于潜在的延伸点。
答案 3 :(得分:0)
当继承失败,或者比它解决的问题更多时,组合很可能是最佳选择。
由于你并没有真正说明Draw()方法,我只是假设它与这里的问题无关。
我认为在这里解决问题的一个好方法是使用Style类构建Field接口和Label类。
我建议的是这样的:
CURRENT_TIMESTAMP