Альтернативы typedef или подклассу строки в c#

Ситуация

У меня есть класс, который внутренне имеет дело со многими различными типами путей к файлам :некоторые локальные, некоторые удаленные; некоторые относительные, некоторые абсолютные.

Раньше многие из его методов передавали их друг другу как strings, но стало очень сложно отслеживать, какой именно путь ожидает каждый метод.

Требуемое исправление

Итак, мы хотели typedefчетыре различных типа дляstring:RemoteRelative, LocalRelative, RemoteAbsoluteи LocalAbsolute. Таким образом, средство проверки статического типа может помочь разработчикам убедиться, что они предоставляют и ожидают stringс правильной семантикой.

К сожалению, string— это sealedв BCL, поэтому мы не могли сделать это с помощью простого наследования. И нет простого 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. Но даже то, что является шагом в этом направлении от пользовательских классов, было бы здорово.

14
задан sblom 27 April 2012 в 19:23
поделиться