C# C如何在具体类不同的地方实现接口?
首先,很抱歉,我的问题的标题不好 在我的应用程序中,我使用标准。这些标准可以看作是控制。我有文本框,但也有单选按钮和复选框 我使用接口来实现这一点: ICriteria是所有criteria类继承自的基本接口 TextType继承自ICriteria。RadioType也继承自ICriteria。但是,RadioType必须有选择 TextType和RadioType都有一些相同的属性 我的问题是,我不知道如何实现这一点。我的意思是,我可以向ICriteria添加一些影响选择的方法和属性,但是TextType也必须继承这些方法和属性。我认为这不好,因为TextType没有选择C# C如何在具体类不同的地方实现接口?,c#,interface,C#,Interface,首先,很抱歉,我的问题的标题不好 在我的应用程序中,我使用标准。这些标准可以看作是控制。我有文本框,但也有单选按钮和复选框 我使用接口来实现这一点: ICriteria是所有criteria类继承自的基本接口 TextType继承自ICriteria。RadioType也继承自ICriteria。但是,RadioType必须有选择 TextType和RadioType都有一些相同的属性 我的问题是,我不知道如何实现这一点。我的意思是,我可以向ICriteria添加一些影响选择的方法和属性,但是T
实现这一点的最佳方法是什么?为什么不使用接口层次结构
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
}
为什么不使用接口的层次结构
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
}
这里有两个选项: 您可以有两个不同的接口或ISomeMoreAdvancedInterface:ISomeBasicInterface-其中一个接口允许简单场景,而第二个接口具有获取选项的额外方法
或者:您可以使用像从TypeConverter复制GetStandardValuesSupported这样的方法-如果返回true,则调用GetStandardValues方法是合理的;如果返回false,则调用方不应调用GetStandardValues,它可能会抛出NotSupportedException,但编写良好的调用方不应看到它们,因为它们正在观察*Supported。这里有两个选项: 您可以有两个不同的接口或ISomeMoreAdvancedInterface:ISomeBasicInterface-其中一个接口允许简单场景,而第二个接口具有获取选项的额外方法
或者:您可以使用像从TypeConverter复制GetStandardValuesSupported这样的方法-如果返回true,则调用GetStandardValues方法是合理的;如果返回false,调用方不应该调用GetStandardValues,它可能会抛出NotSupportedException,但是编写良好的调用方不应该看到它们,因为它们正在观察*Supported。由于缺少详细信息,很难确定,但看起来您试图在一个类中混合表示层和业务逻辑。最好有一个ICriteriaEditor接口,该接口将ICriteria作为属性和工厂包含,该工厂将根据ICriteria类型创建适当的ICriteriaEditor对象。
无论如何,您必须在细节上更加具体。由于缺乏细节,很难确定,但看起来您试图将表示层和业务逻辑混合在一个类中。最好有一个ICriteriaEditor接口,该接口将ICriteria作为属性和工厂包含,该工厂将根据ICriteria类型创建适当的ICriteriaEditor对象。
无论如何,您必须在细节上更加具体。您应该使用哪些选项?@Martijn不太诚实,您应该使用哪些选项?@Martijn不太诚实+1-您可以在不使用ICriteria派生的IChoice的情况下执行此操作-然后RadioType必须继承多个接口。但是考虑到OP的使用情况,您的派生选项可能是更好的选项。+1-您可以在不使用ICriteria派生的IChoice的情况下执行此操作-然后RadioType必须继承多个接口。但是考虑到OP的用例,您的派生选项可能是更好的选项。那么类应该创建控件并将它们返回到GUI,这将把控件添加到GUI界面ICriteria负责什么?现在看来抽象工厂将匹配这种情况。那么这些类应该创建控件并将它们返回到GUI,这将把控件添加到GUI界面ICriteria负责什么?现在看来,抽象工厂将符合这种情况。