首先,抱歉vaque标题,但我不知道我的问题的好标题。
在我的应用程序中,我使用标准。标准可视为对照。我有文本框,还有单选按钮和复选框。
我使用接口来实现这个目标:
ICriteria是所有条件类继承自的基础接口。
TextType继承自ICriteria。 RadioType也继承自ICriteria。但是,RadioType必须有选择。
TextType和RadioType都有一些相同的属性。
我的问题是,我不确切知道如何实现这一点。我的意思是,我可以向ICriteria添加一些影响选择的方法和属性,但TextType也必须继承这些方法和属性。我不认为这很好,因为TextType没有选择。
实施此方法的最佳方法是什么?
答案 0 :(得分:4)
为什么不使用接口层次结构
public interface ICriteria
{
void SomeCriteriaMethod();
}
public interface IChoices : ICriteria
{
void SomeChoicesMethod();
}
然后像这样使用它
foreach (ICriteria criteria in criterias)
{
// something
var choice = criteria as IChoices;
if (choice != null)
// do something else
}
答案 1 :(得分:0)
这里有两个选项:
你可以有两个不同的接口(或ISomeMoreAdvancedInterface : ISomeBasicInterface
) - 其中一个接口允许简单的场景,第二个接口有额外的方法来获取选项。
或者:您可以使用(从TypeConverter
复制)GetStandardValuesSupported
等方法 - 如果返回true
,则调用GetStandardValues
方法是合理的;如果这返回false,则调用者不应该调用 GetStandardValues
(并且它可能会抛出NotSupportedException
,但是编写良好的调用者应该永远不会看到它们,因为它们正在观察{{ 1}})。
答案 2 :(得分:0)
由于缺乏细节,很难确定,但看起来你试图在一个类中混合表示层和业务逻辑。将ICriteriaEditor接口包含ICriteria作为属性可能会更好,而Factory将创建适当的ICriteriaEditor对象,这取决于ICriteria类型。 无论如何,你必须在细节上更具体。