状況
多くの異なる種類のファイル パスを内部的に処理するクラスがあります。ローカル、リモートなどです。相対的なものもあれば、絶対的なものもあります。
以前は、そのメソッドの多くがそれらをstring
s として相互に渡していましたが、各メソッドが予期しているパスのタイプを正確に追跡することは非常に困難になりました。
希望の修正
したがって、本質的には、 、、、およびの 4つtypedef
の異なるタイプが必要でした。このように、静的型チェッカーは、開発者がs を提供し、正しいセマンティクスを期待していることを確認するのに役立ちます。string
RemoteRelative
LocalRelative
RemoteAbsolute
LocalAbsolute
string
残念ながら、string
はsealed
BCL にあるため、単純な継承ではこれを行うことができませんでした。また、単純なtypedef
がないため、そのようにすることもできませんでした。
実際の修正
最終的に、それぞれが を含む 4 つの異なる単純なクラスを作成しました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
ここでの私の夢です。しかし、カスタムクラスからの方向性の一歩であっても素晴らしいでしょう.