"Best" 访问方式 IO.FileInfo 受保护 属性 (OriginalPath)?
"Best" way to access IO.FileInfo Protected property (OriginalPath)?
我正在研究一系列方法,这些方法将测试给定路径以确定它是否(或者,至少 可能 )有效。我有几个重载可以接受 IO.FileInfo
对象或 IO.DirectoryInfo
对象——我个人更喜欢用它来帮助在过程中尽快捕获无效字符。作为流程的一部分,我 "need" 获得的一条信息基本上是用户提供的原始值 - 特别是 在 IO.FileInfo
或 IO.DirectoryInfo
对象,因为它们会自动将 Environment.CurrentDirectory
值添加到它确定为相对路径的任何字符串之前。
例如:
Dim TestFile As New IO.FileInfo("Testing\This is a test")
实例化具有以下属性(以及其他属性)的 IO.FileInfo
对象:
DirectoryName
- "C:\Development\My Solution\My Project\bin\Debug\Testing"
Exists
- False
Extension
- ""
FullName
- "C:\Development\My Solution\My Project\bin\Debug\Testing\This is a test"
Name
- "This is a test"
OriginalPath
- "Testing\This is a test"
最后这个属性是我最感兴趣的,是IO.FileInfo
class的Protected
属性,继承了来自 IO.FileSystemInfo
class,但这似乎是检索传递给 IO.FileInfo
构造函数的原始值的最佳方法。显然,我无法使用简单的 Dim TestPath As String = TestFile.OriginalPath
直接访问 属性 - IDE 显示错误“'System.IO.FileSystemInfo.OriginalPath' is not accessible in this context because it is 'Protected'
” - 所以我只能想出一种方法来获取这条特定的信息:创建一个 全新的 class 继承 IO.FileSystemInfo
和 Public
属性 对于从基数 class 读取的 OriginalPath
。
请注意:我确实有一个接受String
值的重载方法,但实际上我想尝试"hide" 那一个在 Private
修饰符后面,这样只有 FileInfo
和 DirectoryInfo
对象可以用来调用这个方法。我的主要推理是,如果 FileInfo
或 DirectoryInfo
对象由于字符串中的无效字符(或任何其他原因)而无法实例化,我没有理由调用此方法我也许可以 "clean up" 一点代码。
无论如何,创建一个完全独立的class,实际上只会用于访问这个一个属性在这个一个 特定场景似乎是一个非常简单的开销,应该(或者至少可以)事物。不幸的是,我想不出任何其他方法来提取该信息,我只是想知道我是否想得太多了。
与此同时,我已经创建了一个 TempFileInfo
class 用于测试(注意:我还没有实际测试它 ) 没有为任何常规 Public
属性显式实现任何 "custom" 代码(从 IO.FileSystemInfo
class 继承时需要):
Private Class TempFileInfo
Inherits IO.FileSystemInfo
Public Overrides ReadOnly Property Name As String
Get
Throw New NotImplementedException()
End Get
End Property
Public Overrides ReadOnly Property Exists As Boolean
Get
Throw New NotImplementedException()
End Get
End Property
Public Overrides Sub Delete()
Throw New NotImplementedException()
End Sub
Public Shadows ReadOnly Property OriginalPath As String
Get
Return MyBase.OriginalPath
End Get
End Property
Public Shared Widening Operator CType(v As FileInfo) As TempFileInfo
Dim FSI As FileSystemInfo = v
Return CType(FSI, TempFileInfo)
End Operator
End Class
您会注意到我还包含了一个 Widening Operator
,它应该允许我从 "regular" IO.FileInfo
对象转换为我的 TempFileInfo
对象,这样我就可以访问我的 "custom" OriginalPath
属性。这是迄今为止我找到的 "get there from here" 的唯一方法,但我想继续在这里询问,以防有其他建议或我可能忽略的事情。
这种实现方法唯一的"saving grace"是,因为"custom"TempFileInfo
,标准IO.FileInfo
,标准IO.DirectoryInfo
classes 都继承自 IO.FileSystemInfo
class,我应该能够简单地创建一个重载的 Widening Operator
方法来转换 IO.FileInfo
对象以及 IO.DirectoryInfo
对象,而不必创建单独的 TempDirInfo
class.
FileInfo or DirectoryInfo object is created is stored in the protected String OriginalPath
field - which is used for serialization purposes - and the internal DisplayPath属性时输入的路径,作为内参。
初始化class对象时(见.Net源码中的Init() method),输入的路径同时存储在OriginalPath
字段和[=14]字段中=] 属性。
两个 classes 都不提供 public 属性 来检索用于创建对象的初始路径。
相反,它们都 return DisplayPath
属性 值作为 override to the ToString() 方法:
Dim fInfo = New FileInfo("\SomePath\SomeFileName.ext")
Dim originalPath = fInfo.ToString()
var fInfo = new FileInfo(@"\SomePath\SomeFileName.ext");
string originalPath = fInfo.ToString();
我正在研究一系列方法,这些方法将测试给定路径以确定它是否(或者,至少 可能 )有效。我有几个重载可以接受 IO.FileInfo
对象或 IO.DirectoryInfo
对象——我个人更喜欢用它来帮助在过程中尽快捕获无效字符。作为流程的一部分,我 "need" 获得的一条信息基本上是用户提供的原始值 - 特别是 在 IO.FileInfo
或 IO.DirectoryInfo
对象,因为它们会自动将 Environment.CurrentDirectory
值添加到它确定为相对路径的任何字符串之前。
例如:
Dim TestFile As New IO.FileInfo("Testing\This is a test")
实例化具有以下属性(以及其他属性)的 IO.FileInfo
对象:
DirectoryName
-"C:\Development\My Solution\My Project\bin\Debug\Testing"
Exists
-False
Extension
-""
FullName
-"C:\Development\My Solution\My Project\bin\Debug\Testing\This is a test"
Name
-"This is a test"
OriginalPath
-"Testing\This is a test"
最后这个属性是我最感兴趣的,是IO.FileInfo
class的Protected
属性,继承了来自 IO.FileSystemInfo
class,但这似乎是检索传递给 IO.FileInfo
构造函数的原始值的最佳方法。显然,我无法使用简单的 Dim TestPath As String = TestFile.OriginalPath
直接访问 属性 - IDE 显示错误“'System.IO.FileSystemInfo.OriginalPath' is not accessible in this context because it is 'Protected'
” - 所以我只能想出一种方法来获取这条特定的信息:创建一个 全新的 class 继承 IO.FileSystemInfo
和 Public
属性 对于从基数 class 读取的 OriginalPath
。
请注意:我确实有一个接受String
值的重载方法,但实际上我想尝试"hide" 那一个在 Private
修饰符后面,这样只有 FileInfo
和 DirectoryInfo
对象可以用来调用这个方法。我的主要推理是,如果 FileInfo
或 DirectoryInfo
对象由于字符串中的无效字符(或任何其他原因)而无法实例化,我没有理由调用此方法我也许可以 "clean up" 一点代码。
无论如何,创建一个完全独立的class,实际上只会用于访问这个一个属性在这个一个 特定场景似乎是一个非常简单的开销,应该(或者至少可以)事物。不幸的是,我想不出任何其他方法来提取该信息,我只是想知道我是否想得太多了。
与此同时,我已经创建了一个 TempFileInfo
class 用于测试(注意:我还没有实际测试它 ) 没有为任何常规 Public
属性显式实现任何 "custom" 代码(从 IO.FileSystemInfo
class 继承时需要):
Private Class TempFileInfo
Inherits IO.FileSystemInfo
Public Overrides ReadOnly Property Name As String
Get
Throw New NotImplementedException()
End Get
End Property
Public Overrides ReadOnly Property Exists As Boolean
Get
Throw New NotImplementedException()
End Get
End Property
Public Overrides Sub Delete()
Throw New NotImplementedException()
End Sub
Public Shadows ReadOnly Property OriginalPath As String
Get
Return MyBase.OriginalPath
End Get
End Property
Public Shared Widening Operator CType(v As FileInfo) As TempFileInfo
Dim FSI As FileSystemInfo = v
Return CType(FSI, TempFileInfo)
End Operator
End Class
您会注意到我还包含了一个 Widening Operator
,它应该允许我从 "regular" IO.FileInfo
对象转换为我的 TempFileInfo
对象,这样我就可以访问我的 "custom" OriginalPath
属性。这是迄今为止我找到的 "get there from here" 的唯一方法,但我想继续在这里询问,以防有其他建议或我可能忽略的事情。
这种实现方法唯一的"saving grace"是,因为"custom"TempFileInfo
,标准IO.FileInfo
,标准IO.DirectoryInfo
classes 都继承自 IO.FileSystemInfo
class,我应该能够简单地创建一个重载的 Widening Operator
方法来转换 IO.FileInfo
对象以及 IO.DirectoryInfo
对象,而不必创建单独的 TempDirInfo
class.
FileInfo or DirectoryInfo object is created is stored in the protected String OriginalPath
field - which is used for serialization purposes - and the internal DisplayPath属性时输入的路径,作为内参。
初始化class对象时(见.Net源码中的Init() method),输入的路径同时存储在OriginalPath
字段和[=14]字段中=] 属性。
两个 classes 都不提供 public 属性 来检索用于创建对象的初始路径。
相反,它们都 return DisplayPath
属性 值作为 override to the ToString() 方法:
Dim fInfo = New FileInfo("\SomePath\SomeFileName.ext")
Dim originalPath = fInfo.ToString()
var fInfo = new FileInfo(@"\SomePath\SomeFileName.ext");
string originalPath = fInfo.ToString();