Боюсь, что даже ответ на ваш бонусный вопрос «вы не можете».

ли способ в C # добавитьнеявный преобразования в типы, уже определенные в других сборках?

Например, если я использую две разные сборки, каждая из которых предоставляет своиVector3 structи использовать его в своих API, было бы неплохо иметь возможность определить преобразование один раз, а затем просто передатьFoo.Vector3 к методу, который ожидаетBar.Vector3и естьавтоматически преобразованный.

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

Я понимаю, что могу создать свой собственныйVector3 struct с неявными операторами преобразования в и из двух других структур, но это не решило бы все случаи, когда я хочунепосредственно передать объект одного (внешнего) типа методу, ожидающему другого.

Бонусный вопрос: есть ли что-то, что авторы библиотек, которые представляют такие вещи, как структура Vector3, в своих API должны делать для облегчения использования в этом отношении?

 nawfal06 июн. 2013 г., 14:47
операторы расширения .. я люблю это :)

Ответы на вопрос(2)

вы не можете добавить неявные преобразования, которые преобразуются в и из типа, который вы не можете изменить. Я бы порекомендовал обходной путь, который вы упомянули, но вы уже упомянули об этом :).

Боюсь, что даже ответ на ваш бонусный вопрос «вы не можете».

Решение Вопроса

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

Вы можете улучшить элегантность преобразования между двумя типами, добавив методы расширения к обоим типам Vector3;

public static Bar.Vector3 ToBarVector3(this Foo.Vector3 foo) {
    return /* instance of Bar.Vector3 */
}

public static Foo.Vector3 ToFooVector3(this Bar.Vector3 bar) {
    return /* instance of Foo.Vector3 */
}

Это самое лучшее, чего можно ожидать.

Ваш ответ на вопрос