String 哪个更好:表示文件名的字符串还是文件名类?

String 哪个更好:表示文件名的字符串还是文件名类?,string,class,language-agnostic,String,Class,Language Agnostic,该类的优点是,它可以在赋值/构造时自动过滤坏字符串。它还使您能够绝对确定您正在处理的是一个文件名,而不仅仅是一个用来表示文件名的字符串 这个班的问题是,限制在哪里?我们最终会创建大量不必要的类吗?例如,某些字符串应仅在x和y字符之间。我应该给他们上课吗 那么URL类呢?还是只用于大写字符串的类?一个人的底线在哪里 谢谢。试着用对象而不是简单的字符串来思考。这个字符串代表什么?如果它代表的不仅仅是一个单词或短语,那么一个类可能就没有意义了 我没有定义文件名类,而是定义一个文件类来表示实际的文件。文

该类的优点是,它可以在赋值/构造时自动过滤坏字符串。它还使您能够绝对确定您正在处理的是一个文件名,而不仅仅是一个用来表示文件名的字符串

这个班的问题是,限制在哪里?我们最终会创建大量不必要的类吗?例如,某些字符串应仅在x和y字符之间。我应该给他们上课吗

那么URL类呢?还是只用于大写字符串的类?一个人的底线在哪里


谢谢。

试着用对象而不是简单的字符串来思考。这个字符串代表什么?如果它代表的不仅仅是一个单词或短语,那么一个类可能就没有意义了

我没有定义文件名类,而是定义一个文件类来表示实际的文件。文件名只是该类的一个属性(您可以将文件名验证放在该类中)。它还为您提供了构建有用的相关属性和方法的机会,如Open()、Write()、Close()、Read()、PathName等


类似地,URL类也是有意义的,因为您可能需要从字符串中提取其他细节。例如:主机名、端口、查询字符串。通过使其成为一个类,您可以将所有这些功能捆绑在一个位置

试着用对象而不是简单的字符串来思考。这个字符串代表什么?如果它代表的不仅仅是一个单词或短语,那么一个类可能就没有意义了

我没有定义文件名类,而是定义一个文件类来表示实际的文件。文件名只是该类的一个属性(您可以将文件名验证放在该类中)。它还为您提供了构建有用的相关属性和方法的机会,如Open()、Write()、Close()、Read()、PathName等


类似地,URL类也是有意义的,因为您可能需要从字符串中提取其他细节。例如:主机名、端口、查询字符串。通过使其成为一个类,您可以将所有这些功能捆绑在一个位置

这取决于上下文。在大多数应用程序中,由于您给出的原因,也因为您正在使用的API希望文件名是字符串,所以您不会费心(检查有效的文件名有什么好处吗?当您尝试使用它时,可能会看到一个合适的错误,系统库中的代码将适应不同的平台,您可能不知道或正在测试这些平台……)

但是,我可以想象一个专门的应用程序或库,其中了解目录和文件之间的区别可能很重要(类可以在类型级别标记区别),或者您需要大量与文件相关的信息(类将是收集这些信息的好地方)或者在对文件名执行某些操作时具有高性能(该类可以通过缓存结果来提高性能),等等


因此,最好的设计取决于您正在做什么。对于您的系统来说,只有大写字符串是否至关重要?您正在使用的网络库中是否已经存在URL?上下文就是一切…

它取决于上下文。在大多数应用程序中,您不会为此烦恼,因为您给出了原因,也因为API您使用的文件名应该是字符串(检查有效的文件名有什么好处吗?当您尝试使用它时,可能会看到一个合适的错误,并且系统库中的代码将适应不同的平台,您可能不知道或正在测试…)

但是,我可以想象一个专门的应用程序或库,其中了解目录和文件之间的区别可能很重要(类可以在类型级别标记区别),或者您需要大量与文件相关的信息(类将是收集这些信息的好地方)或者在对文件名执行某些操作时具有高性能(该类可以通过缓存结果来提高性能),等等


因此,最佳的设计将取决于您正在做的事情。对于您的系统来说,只有大写字符串是否至关重要?您正在使用的网络库中是否已经存在url?上下文就是一切…

与url类似,filename类将允许支持获取其组件,如服务器(如果不是本地的话),路径,名称,完整路径,文件类型等。我不想把它放在文件类中的原因是,在我看来,一个文件代表磁盘上存在的东西。一个文件名可能不作为磁盘上的文件存在。另外,为什么不把它分解成它的组件呢?就像一个网页有一个url,它本身有一个主机名等等。类似于url,一个文件名类uld支持获取其组件,如服务器(如果不是本地的),路径,名称,完整路径,文件类型等。我不想把它放在文件类中的原因是,在我看来,一个文件代表磁盘上存在的东西。一个文件名可能不作为磁盘上的文件存在。另外,为什么不把它分解成它的组件呢?就像一个网页有一个url,它本身有一个主机名等等。我不完全确定你在说什么关于检查文件名的有效性。至少在C#中,有一种方法可以找出系统无效字符是什么,因此,如果在不同的操作系统上运行,假设操作系统将这些无效字符暴露给该语言,那么检查就很容易了。代码本身与平台无关。我想我认为它是w一般来说,把它放在一个类中是很好的,这样当你把它作为一个参数传递时,你知道它代表一个有效的文件名,不管是谁在操纵它。好的,那么对于c,你应该考虑到这一点。这就是我所说的上下文。我不完全同意