【发布时间】:2014-09-19 19:46:43
【问题描述】:
System.IO.File 没有构造函数。而是使用创建/打开静态方法。
为什么不使用构造函数创建或打开 File?
调用构造函数是否意味着调用构造函数的代码“拥有”该对象,而对于像文件这样的对象只是包装文件系统拥有的文件的句柄的情况并非如此?这是一些 OOP 约定、.NET/C# 约定,还是纯粹是任意的?
【问题讨论】:
-
在 C++ 中,可以使用标志构造 std::fstream 来指示打开现有文件或创建新文件。但它也允许空构造,然后调用 open 带有控制是创建新文件还是打开现有文件的标志。也许 C# 的做事方式是 OOP 的更现代版本。
-
我认为 Create 和 Open 与操作相关联,而不是对象。你打开一个文件,你没有创建一个“打开”。由于这些操作与实例无关,因此它们是静态的。
-
当然,您可以创建一个 File 对象,并以某种方式指定您是要打开它还是创建它或什么。这将导致各种复杂的构造函数。工厂模式正是你想要的。设计是正确的。