Path::InvalidPathChars 为什么被作废

看到微软把Path::InvalidPathChars标记为Obsolete,觉的很奇怪,查了一下MSDN,发现InvalidPathChars是一个只读的字段(数组类型),而不是属性。调用它不是很安全的,因为恶意代码可以修改该数组的内容,从而造成你的程序不正确运行。解决的方法是调用Path.GetInvalidPathChars() 方法。

【引】保护并且公开只读的数组字段

http://www.cnblogs.com/Laeb/archive/2007/02/12/648540.html

使用不从被管理的库中通过只读的公开的数组字段来定义边界行为或者定义你的应用程序的安全,因为只读的公开的数组字段能够被更改。

备注

一些 .NET Framework 类包括了只读的公开的字段,这些字段中包含了特定平台的边界参数。例如,InvalidPathChars 字段就是一个被用来描述不允许出现在文件路径字符串中的字符数组。许多与其类似的字段在 .NET Framework 中几乎随处可见。

类似于 InvalidPathChars 一样的公开的只读字段的值能够通过你的代码或者对你的代码进行共享的应用程序域的代码而被更改。你不应该使用这种只读的公开的数组字段来为你的应用程序而定义边界行为。如果你这样做,那么恶意代码能够改变边界定义并且以不可预料的方式来使用你的代码。

在 .NET Framework 2.0 以及后续版本中,你应该使用方法来返回一个新的数组来替代使用公开的数组字段。例如,如果要替代 InvalidPathChars 字段的使用,那么你应该使用 GetInvalidPathChars 方法。

注意:.NET Framework 中的类型并不使用公开的字段来定义内部的边界类型。作为替代,.NET Framework 使用了分离的私有字段。并且,改变这些公开字段的值并不会改变 .NET Framework 类型的行为。

原文地址:https://www.cnblogs.com/puncha/p/3877031.html