类中的使用方法

问题描述:

我有两个类。例如让他们成为目录和文件。有我自己的自定义类,而不是.NET Framework的一部分。 所以,Directory有Title字段和文件列表。文件也有几个字段。类中的使用方法

我应该在哪里放置方法,它将按目录标题返回文件列表,例如,目录类或文件类中的 ?

即其中的这些好:

public List<Files> Directory.GetFiles(string directoryTitle){...} 
public List<Files> File.GetFilesByDirectory(string directoryTitle){...} 

,为什么?

+1

它应该返回'IEnumerable '或'ReadOnlyCollection ',而不是'List '。 – SLaks

+1

[System.IO.Directory.GetFiles](http://msdn.microsoft.com/zh-cn/library/07wt70x2.aspx)有什么问题? – Groo

+0

@格罗 - 这只是一个例子。我的意思是任何班级都有这种情况。 – Tannheuser

两个想法:

第一,它是知道的上市文件的目录,因此,这就是应该住。

其次,尝试坚持接口为您的返回类型 - IList而不是列表。这为返回不同类型的列表和单元测试提供了更大的灵活性。

+0

作为上面提到的@SLaks,只读集合(或数组或IEnumerable)对于返回类型来说是一个更好的选择。 – Groo

+0

@格罗:不是数组;数组不是只读的,必须调整大小以适合数组。 – SLaks

+0

@SLaks:只读集合***或***数组。我个人只会考虑'IEnumerable',但是'Directory.GetFiles'(以及许多其他的BCL类)会返回一个数组。如果没有别的办法,与List列表相比,需要额外的努力来调整它的大小。 – Groo

我想说的首先是更好

public List<Files> Directory.GetFiles(string directoryTitle){...} 

由于文件所在本身应该不知道和目录是知道哪些文件包含。

你实际上把它们放在哪里是你自己的特权,但我会说在这个例子中使用第一个版本在语义上更合理:Directory.GetFiles。 NET框架实际上公开了一个Directory类,您可以使用它作为示例,包含此类方法。

考虑到目录实例已经包含一个已知文件列表,它似乎也会反其道而行之,反之亦然。

我会亲自离开这两个类,创建第三个类来完成最大化代码重用机会的工作。称它为DirectoryFileFinder或类似的东西。