我正在研究一系列方法,这些方法将测试给定路径以确定它是否(或至少可能)有效。我有几个重载可以接受一个IO.FileInfo
对象或一个IO.DirectoryInfo
对象——我个人更喜欢用它来帮助在此过程中尽快捕获无效字符。作为流程的一部分,我“需要”获取的一条信息基本上是用户提供的原始值——尤其是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"
最后一个属性是我最感兴趣的。它是类的Protected
属性,IO.FileInfo
继承自IO.FileSystemInfo
类,但它似乎是检索传递给IO.FileInfo
构造函数的原始值的最佳方法。显然,我不能用简单的方式直接访问该属性Dim TestPath As String = TestFile.OriginalPath
- IDE 给出的显示错误“ 'System.IO.FileSystemInfo.OriginalPath' is not accessible in this context because it is 'Protected'
” - 所以我只能想到一种方法来获取这条特定信息:创建一个全新的类,该类继承IO.FileSystemInfo
的Public
属性为从OriginalPath
基类读取的。
请注意:我确实有一个接受String
值的重载方法,但我实际上正在考虑尝试将其“隐藏”在Private
修饰符后面,以便只有FileInfo
和DirectoryInfo
对象可以用于调用此方法。我的主要理由是,如果一个FileInfo
或DirectoryInfo
对象由于字符串中的无效字符(或任何其他原因)而无法实例化,我没有理由调用此方法,我可能能够“清理”代码一点。
无论如何,创建一个真正只用于在这个特定场景中访问这个属性的整个单独的类对于应该(或至少可以)是一件相当简单的事情来说似乎是一个非常多的开销。不幸的是,我想不出任何其他方法来提取该信息,我只是想知道我是否可能过度思考了这一点。
与此同时,我继续创建了一个TempFileInfo
用于测试的类(注意:我还没有实际测试过),而没有为任何常规属性显式实现任何“自定义”代码Public
(从IO.FileSystemInfo
类继承时需要):
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
应该允许我从“常规”IO.FileInfo
对象转换为我的对象的TempFileInfo
对象,以便我可以访问我的“自定义”OriginalPath
属性。这是迄今为止我发现的“从这里到达那里”的唯一方法,但我想继续在这里询问,以防有其他建议或我可能忽略的事情。
这种实现方法的唯一“可取之处”是,因为“自定义” TempFileInfo
、标准IO.FileInfo
和标准IO.DirectoryInfo
类都继承自IO.FileSystemInfo
该类,我应该能够简单地创建一个重载Widening Operator
方法来转换IO.FileInfo
对象以及IO.DirectoryInfo
对象,而不必创建一个单独的TempDirInfo
类。