Vb.net 为什么可以';t我将属性声明为System.IO.Path

Vb.net 为什么可以';t我将属性声明为System.IO.Path,vb.net,.net,Vb.net,.net,我使用自定义类在方法之间传递数据。其中一个主要功能是图像处理,因此我有一个图像路径和一个自定义拇指路径作为类的属性。我想使用System.IO.Path类中包含的方法作为属性的一部分,但我似乎不能这样做 我知道如何使用string类型而不是System.IO.Path作为类型来实现这一点,所以我不需要任何人告诉我如何这样做。我只是觉得能够将我的ImagePath声明为System.IO.Path会容易得多,因为我可以在我的ImagePath属性上使用Path方法。我肯定对声明类型缺乏了解,我希望

我使用自定义类在方法之间传递数据。其中一个主要功能是图像处理,因此我有一个图像路径和一个自定义拇指路径作为类的属性。我想使用
System.IO.Path
类中包含的方法作为属性的一部分,但我似乎不能这样做

我知道如何使用
string
类型而不是
System.IO.Path
作为类型来实现这一点,所以我不需要任何人告诉我如何这样做。我只是觉得能够将我的
ImagePath
声明为
System.IO.Path
会容易得多,因为我可以在我的
ImagePath
属性上使用
Path
方法。我肯定对声明类型缺乏了解,我希望我能从这个问题中学到一些东西

类的定义方式:

Public Class myClass
    'structured information which will be passed to a replicator

    Public Property ID As Integer
    Public Property ImagePath As System.IO.Path '<== this doesn't work
    Public Property ThumbPath As System.IO.Path '<== this doesn't work
    Public Property GroupID As Byte
    Public Property SystemID As Byte
    Public Property Comment As String
    'Other properties
End Class

为什么我不能将属性声明为System.IO.Path类?如果出于某种原因(请解释原因)回答为“否”,那么我如何使用
System.IO.Path
方法作为属性的扩展,而不作为具有相同方法的精确副本的自定义类重新编写?

您不能声明的实例,因为它是一个静态类-无法实例化。可以简单地将其视为
System.IO.path
名称空间下的一组与路径相关的全局函数。(真正的名称空间只是
System.IO
,但因为
Path
是一个静态类,所以从功能上讲,它的行为实际上就像是一组相关全局函数的名称空间。)

您的
ImagePath
属性需要是
string
,当您需要该逻辑时,只需将其传递给
Path
函数。这有点不幸

或者,您可以创建一个新类(对不起,C#代码;我不是VB.NET专家):

一旦你有了这个类,你可以写:

private Filename m_oImagePath = null;

我在我的项目中也做了类似的事情,因为文件夹/文件路径有一个特定的类型,可以更容易地更新与路径名操作相关的逻辑。

为什么不使用
DirectoryInfo
比如:

Public Property ImagePath As System.IO.DirectoryInfo
Public Property ThumbPath As System.IO.DirectoryInfo

这几乎是可行的,我可能会结合xxbbcc的建议继承这个类。唯一的问题是
System.IO.DirectoryInfo
没有
GetExtension
GetFileName
,因为它是一个目录类,而不是一个完整的文件操作类。我可以在VB.NET中构建这个类,没有问题。问了这个问题后,我想这可能是最简单的方法。我希望它会更自动,但唉,显然我不能既吃蛋糕又吃蛋糕。感谢您解释类和名称空间之间的区别。@turbonate是的,我同意您的观点-如果这样做更容易,那就更好了;我觉得这个解决办法有点笨拙。我很高兴这有帮助-谢谢投票。
private Filename m_oImagePath = null;
Public Property ImagePath As System.IO.DirectoryInfo
Public Property ThumbPath As System.IO.DirectoryInfo