首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提取具有复杂类结构的接口

提取具有复杂类结构的接口
EN

Stack Overflow用户
提问于 2013-01-25 09:18:55
回答 2查看 216关注 0票数 1

当我有多层类和接口时,我对使用接口提取的最佳方式感到有点困惑。假设我有以下层次结构:

代码语言:javascript
运行
复制
Foo : WidgetBase, IWidget 
WidgetBase: BusinessObject, IThingy
IThingy : IGenericObject

现在我知道我必须将一个IFoo接口提取到一个单独的项目中;但是该接口结构必须复制真实的结构吗--这意味着我也必须为BusinessObject和WidgetBase提取接口?或者这是否意味着我应该在创建提取的接口时扁平化结构,创建一个接口,IFoo,包含与Foo及其所有父类和接口的属性相对应的属性,一直向上?

我的接口中也有一些枚举类型属性--我该如何最好地处理这些属性呢?

代码语言:javascript
运行
复制
public interface IWidget
{
    public WidgetType Type { get; set; }
}

public enum WidgetType
{
    Big, Small
}

请放出一些光芒。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 09:27:03

IFoo最低要求

IFoo应该继承IWidgetIThingy。它还需要包括FooWidgetBase的所有公共成员。

代码语言:javascript
运行
复制
public interface IFoo : IWidget, IThingy
{
    // public member of Foo and WidgetBase...
}

潜力重构1:

WidgetBase定义一个接口可能更好,如下所示:

代码语言:javascript
运行
复制
public interface IWidgetBase : IThingy
{
    // public members of WidgetBase...
}

那么IFoo就可以直接继承它:

代码语言:javascript
运行
复制
public interface IFoo : IWidget, IWidgetBase
{
    // public member of Foo.
}

潜力重构2:

同样的道理也适用于BusonessObject:为它定义一个接口,并让IWidgetBase继承它。

通用原则:

你的接口应该指定你的对象的行为,并且应该在行为自然扩展的地方使用继承。

票数 1
EN

Stack Overflow用户

发布于 2013-01-25 10:21:01

我会根据你新界面的用途推荐你这样做。您希望IFoo具有哪些行为?换句话说,它在新项目中的用途是什么。提取仅够新项目使用的内容。不要把从其他接口或从Foo类的当前状态继承的IFoo搞乱了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14513823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档