情况
我的课程在内部处理许多不同类型的文件路径:一些是本地的,一些是远程的;有的相对,有的绝对。
过去的情况是,它的许多方法将它们作为 s 相互传递string
,但是很难准确地跟踪每种方法所期望的路径类型。
所需的修复
所以我们本质上想要typedef
四种不同的类型string
:RemoteRelative
、、、LocalRelative
和。这样,静态类型检查器可以帮助开发人员确保他们提供和期望s 具有正确的语义。RemoteAbsolute
LocalAbsolute
string
不幸的string
是sealed
,在 BCL 中,所以我们不能用简单的继承来做到这一点。而且没有 simple typedef
,所以我们也不能那样做。
实际修复
我最终创建了四个不同的简单类,每个类都包含一个readonly string
.
public struct LocalAbsolutePath {
public readonly string path;
public LocalAbsolutePath(string path) {
this.path = path;
}
}
这主要是可行的,但最终会增加一些不受欢迎的冗长。
问题:我是否忽略了任何自然适合简单 C# 语法的替代方案?
就像我上面提到的,C 风格typedef string LocalAbsolutePath;
甚至 F# 风格type LocalAbsolutePath = string
将是我的梦想。但即使是从自定义类的方向迈出的一步也会很棒。