Скажем, у меня есть простой объект, который поддерживает неявное приведение к System.String
Я бы поставил под сомнение это дизайнерское решение для начала. Тот факт, что он поднял этот вопрос о перегрузке операторов, предполагает, что ваши коллеги будут задавать такие же вопросы. Я даже не знаю ответа (с точки зрения того, что будет делать компилятор) с моей головы.
Я определенно не буду предлагать реализацию IEquatable<string>
, так как тогда x.Equals(y)
не будет симметричным с y.Equals(x)
. Вы могли бы реализовать две перегрузки ==
в вашем классе, в обе стороны ... но тогда это не будет соответствовать Equals
.
Я бы предложил просто иметь свойство с именем Value
или Code
типа string, тогда вы можете использовать:
if (companyCode.Value == "MSFTUKCAMBS")
и сразу станет ясно, что это значит.
В принципе, я думаю, что ситуации, когда неявные преобразования являются подходящими, очень редки и весьма далеки.
Из Руководства по проектированию для разработчиков библиотек классов
Не указывайте оператора преобразования, если конечное пользователи явно не ожидают такого преобразования.
Есть ли здесь такое четкое ожидание?