Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 最好将方法添加到预定义类或生成子类?_Oop_Language Agnostic - Fatal编程技术网

Oop 最好将方法添加到预定义类或生成子类?

Oop 最好将方法添加到预定义类或生成子类?,oop,language-agnostic,Oop,Language Agnostic,假设要将lengthOfFirstLine方法添加到预定义的文件类中。修改现有类,或者使用新方法创建一个扩展File类的新类,这是更好的做法吗 编辑——具体来说,一个类缺少一个特定的方法。我不想完全更改类,而是用该方法对其进行扩充。这取决于该方法是否适用于类文件的所有元素。例如,lengthOfFirstLine不适用于二进制文件,因此它可能不属于泛型文件类,但如果您的类仅表示文本文件,则应转到该类。这取决于该方法是否适用于类文件的所有元素。例如,lengthOfFirstLine不适用于二进制

假设要将lengthOfFirstLine方法添加到预定义的文件类中。修改现有类,或者使用新方法创建一个扩展File类的新类,这是更好的做法吗


编辑——具体来说,一个类缺少一个特定的方法。我不想完全更改类,而是用该方法对其进行扩充。

这取决于该方法是否适用于类文件的所有元素。例如,lengthOfFirstLine不适用于二进制文件,因此它可能不属于泛型文件类,但如果您的类仅表示文本文件,则应转到该类。

这取决于该方法是否适用于类文件的所有元素。例如,lengthOfFirstLine不适用于二进制文件,因此它可能不属于泛型文件类,但如果您的类只表示文本文件,那么它应该放在那里。

对于.NET语言,还可以选择使用。通过这种方式,您不必通过向类中添加帮助程序/实用程序方法来“弄脏”类,也不需要继承-您只需向代码中添加一个使用语句的
,即可向类中添加功能。

对于.NET语言,还可以选择使用。通过这种方式,您不必通过向类中添加帮助程序/实用程序方法来“弄脏”类,也不需要继承-您只需在代码中使用
语句添加一个
,即可向类中添加功能。

同意Luis和Lester的观点。如果您使用的是.Net,那么扩展方法就是实现这种功能的方法。但是,如果可以打开所有类型的文件(如二进制文件),则不应尝试将LengthOfFirstLine添加到基类中。您可以将其子类化为FileClass,并将该方法添加到其中

请记住,.Net中的扩展方法无论如何都是语法糖。您可以使用自己的语言使用静态类和方法来模拟它。这就是.Net在幕后所做的


例如,有一个静态FileHelpers类,并在其上有各种静态帮助器方法。每个静态方法的第一个参数都是File类。因此,您可以使用
文件帮助程序调用它。GetLengthOfFirstLine(myOpenedFile)
同意Luis和Lester的观点。如果您使用的是.Net,那么扩展方法就是实现这种功能的方法。但是,如果可以打开所有类型的文件(如二进制文件),则不应尝试将LengthOfFirstLine添加到基类中。您可以将其子类化为FileClass,并将该方法添加到其中

请记住,.Net中的扩展方法无论如何都是语法糖。您可以使用自己的语言使用静态类和方法来模拟它。这就是.Net在幕后所做的

例如,有一个静态FileHelpers类,并在其上有各种静态帮助器方法。每个静态方法的第一个参数都是File类。因此,您可以使用
FileHelpers.GetLengthOfFirstLine(myOpenedFile)