将自定义FileInfo构造函数参数从fileName更改为fileNameOrPath

时间:2015-06-26 14:35:35

标签: c# .net

我试图通过引用FileInfo和DirectoryInfo密封类来实现一些行为。

FileInfo只有一个构造函数。它需要文件名或路径。

FileInfo fileInfoOne = new FileInfo("Sample.txt");
FileInfo fileInfoTwo = new FileInfo(@"C:\Test\Sample.txt");

DirectoryInfo只有一个构造函数,它需要路径。

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Test\");

FileInfo和DirectoryInfo构造函数看起来像

public FileInfo(string fileName);
public DirectoryInfo(string path);

这里,DirectoryInfo接受路径为字符串,这是有道理的。但是,FileInfo接受fileName作为字符串,我们可以传递名称或路径,这对我来说有点奇怪。

我只想更改构造函数,如下所示。

 public FileInfo(string fileNameOrPath);    

我是否违反任何设计规则(命名转换的观点)?

注意:我引用FileInfo和DirectoryInfo仅供参考。我的问题很相似,但并不完全相同。

更新

基本上我们正在实现TextFileInfo,PdfFileInfo,DocFileInfo等。这些文件类型中的每一种在公共属性之上都有自己的属性(基于客户端要求,如DocFileInfo的“TextLanguage”)。公共属性希望保留在基本MasterFileInfo类中,类似于FileInfo。

任何最终建议?

2 个答案:

答案 0 :(得分:1)

路径和文件名是操作系统概念,当您说my.txt时,它表示当前文件夹中名称为D:\data\temp\my.txt的文件,文件句柄将指向D:\data\temp\之类的地方..\..\my.txt是当前文件夹。您还可以将my.txt作为构造函数的路径,这意味着从当前目录转到2目录并查找名为D:\my.txt的文件,如果当前目录,它将转换为D:\data\temp\FileInfo fileInfoOne = new FileInfo("Sample.txt"); FileInfo fileInfoTwo = new FileInfo(@"C:\Test\Sample.txt");

同时注意两者

End If

将致电same constructor for FileInfo

答案 1 :(得分:0)

虽然我不同意你的陈述FileInfo构造函数参数名称/描述没有意义,但根据评论听起来你可以这样做:

public class FileInfoPassthrough // Could this be considered a facade?
{

    /// <summary>
    /// A much more descriptive parameter name for the FileInfo constructor
    /// </summary>
    /// <param name="fileNameOrPath">Either the filename at the relative path of execution, or the full filename and path.</param>
    public FileInfo GetFileInfo(string fileNameOrPath)
    {
         return new FileInfo(fileNameOrPath);
    }
}

这将允许您有一个“更具描述性”的参数名称,只需新闻FileInfo并返回它。您可以使用此方法代替在各个地方新建FileInfo

通过这个类对FileInfo对象的新增,从消费者中抽象出FileInfo中构造函数的“坏名称/描述”(假设他们使用的是这种方法而不是{{1}直接)。