C#如何实现具体类不同的接口?

时间:2010-12-24 11:19:48

标签: c# interface

首先,抱歉vaque标题,但我不知道我的问题的好标题。

在我的应用程序中,我使用标准。标准可视为对照。我有文本框,还有单选按钮和复选框。

我使用接口来实现这个目标:

ICriteria是所有条件类继承自的基础接口。

TextType继承自ICriteria。 RadioType也继承自ICriteria。但是,RadioType必须有选择。

TextType和RadioType都有一些相同的属性。

我的问题是,我不确切知道如何实现这一点。我的意思是,我可以向ICriteria添加一些影响选择的方法和属性,但TextType也必须继承这些方法和属性。我不认为这很好,因为TextType没有选择。

实施此方法的最佳方法是什么?

3 个答案:

答案 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类型。 无论如何,你必须在细节上更具体。

相关问题