Строгая типизация для строк или других запечатанных классов

Я формулирую свой пример в общих чертах, потому что он передает суть без необходимости вдаваться в подробности моей конкретной проблемы.

Предположим, у вас есть несколько методов, принимающих строки в качестве параметров. Предположим, что одна строка представляет собой «имя» человека, а другая — «фамилию» человека. Могут быть и другие строки, такие как «любимая еда».

Теперь в вашем коде вы продолжаете находить ошибки во время выполнения, потому что вы путаете параметры. Вы можете поменять порядок «имя» и «фамилия» или использовать одно вместо другого. Ценность строго типизированных языков заключается в том, что они находят эти ошибки во время сборки, а не во время выполнения.

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

public class FirstName : String
{
}

public class LastName : String
{
}

Теперь, если вы передадите неправильный тип строки, компилятор будет жаловаться. Вышеупомянутое невозможно, потому что строка запечатана. Кроме того, оператор «using» не будет работать (я думаю), потому что компилятор не будет жаловаться, когда я их перепутаю.

using LastName = String;

Конечно, я мог бы создавать классы, которые оборачивают строку, а затем писать методы преобразования приведения, но это, похоже, больше проблем, чем пользы.

8
задан ChuckZ 26 March 2012 в 18:04
поделиться