0

采用以下代码(非常类似于我正在尝试做的事情)。

目录.cs

公共接口 IDirectory
{
    字符串 FullPath{ 得到;}
}

目录树.cs

公共类目录树
{
    私人目录_root;
    ...
    公共 IDirectory GetRoot(){...};

    私有类目录:IDirectory
    {
       ...
    }
}

我想为使用这个库的其他类提供一种访问目录信息的方法,但是以“不可变”的方式,所以只能在接口中使用“get”函数。在内部,比如说,一个目录被重命名(FileSystemWatcher),我可以用一个设置器更新目录名称字段,但只能从 DirectoryTree 或 Directory 类内部。事件可以注册到 DirectoryTree 以得到更改通知。

接口似乎对此最有意义,但我缺乏经验。我一直认为接口只是让与不同类的相似部分交互变得容易,但我还没有看到人们使用它们来“保护”类的部分免受外界影响的任何例子。这也让我想知道我是否打破了封装?接口是解决此问题的可取方法吗?

4

2 回答 2

1

我认为这种方式对你有好处。但在我推荐阅读这些文章之前:

何时使用接口

  • 接口更适合您的应用程序需要许多可能不相关的对象类型来提供某些功能的情况。

  • 接口比基类更灵活,因为您可以定义可以实现多个接口的单个​​实现。

  • 在您不必从基类继承实现的情况下,接口会更好。

  • 当您不能使用类继承时,接口很有用。例如,结构不能从类继承,但它们可以实现接口。

抽象类和方法

接口与基类

于 2013-10-20T04:53:25.473 回答
0

我不认为接口是这个特定任务的合适选择。

我宁愿创建一个抽象基类并在我的公共类中继承它。这样,您的基类的信息只能通过您的公共类更改,该公共类将连接到其他类。

由于接口不允许您实现代码,因此您基本上将所有代码都放在实现接口的类中,您可以选择隐藏该实现,但我更喜欢抽象基类来实现这一点。

于 2013-10-20T05:10:17.410 回答