C# 为什么.NET System.IO.File使用Create/Open而不是构造函数?

C# 为什么.NET System.IO.File使用Create/Open而不是构造函数?,c#,.net,oop,C#,.net,Oop,System.IO.File没有构造函数。而是使用创建/打开静态方法 为什么不使用构造函数创建或打开文件 调用构造函数是否意味着调用构造函数的代码“拥有”了对象,而对于像文件这样的东西,对象只是将句柄包装到文件系统拥有的文件,情况并非如此?这是某种OOP约定、.NET/C约定,还是纯粹的任意性?和Open没有实际实例化文件,它们返回一个新的文件流,用于访问磁盘上文件中的数据 它们本质上是的工厂方法,作为FileStream实例的构造函数进行处理。File只是为您实例化其他类的助手类。“文件”本身

System.IO.File没有构造函数。而是使用创建/打开静态方法

为什么不使用构造函数创建或打开文件

调用构造函数是否意味着调用构造函数的代码“拥有”了对象,而对于像文件这样的东西,对象只是将句柄包装到文件系统拥有的文件,情况并非如此?这是某种OOP约定、.NET/C约定,还是纯粹的任意性?

Open
没有实际实例化
文件
,它们返回一个新的
文件流
,用于访问磁盘上文件中的数据


它们本质上是的工厂方法,作为
FileStream
实例的构造函数进行处理。

File
只是为您实例化其他类的助手类。“文件”本身是文件系统上的对象,而不是.NET中的对象。因此,流、读卡器、
FileInfo
等都代表了与文件交互的不同方面文件类只是所有这些不同类的网关。

文件类是.NET Framework 1.0版的后期添加。在微软进行可用性研究后添加。他们邀请了以前从未使用过.NET的程序员,并要求他们编写使用FileStream和StreamWriter类的代码。那些有构造函数的。成功率为零


所以他们提出了File,它有一系列创建/打开文件的静态助手方法。把它们想象成工厂方法。不,您不创建文件。你用它。检查你最喜欢的C语言编程书关于静态类。C++中的

,STD::fStand可以用标志来构造打开一个现有文件或创建一个新文件。但它也允许空构造,然后调用open,并使用标志控制是创建新文件还是打开现有文件。也许C#方式是OOP的一个更现代的版本。我认为创建和打开与操作相关,而不是对象。你打开一个文件,你不会创建一个“打开”。由于这些操作与实例没有关联,因此它们是静态的。当然,您可以创建一个文件对象,并以某种方式指定是否要打开它或创建它或做什么。这将导致各种复杂的构造函数。工厂模式正是您在这里想要的。设计是正确的。这是OOP术语吗?或者这是某种模式或其他东西的示例?我有点明白你的意思,但我发现很难清晰地表达和区分哪些类代表了不在.NET中的对象。例如,按照同样的思路,数据库是否应该使用create/open而不是构造函数?那么表示存储在该数据库中的对象的类呢?鉴于您可以构造FileStream实例,我开始怀疑您关于对象“不在.NET中”的推理。相反,我认为将任何对象视为.NET中的对象可能是有意义的,否则为什么它会是一个对象?@JDiMatteo
文件
类就是facade模式的一个例子。有一些方法可以简化常见操作,如打开、复制、移动和将文本写入文件。也可以调用一些方法工厂方法,因为它们为客户机代码创建
FileStream
对象。