c# – 是否可以在程序集G和M中的类型之间添加隐式运算符?

假设有一个图形API G,它不想依赖任何外部数学库,因此将其所有矢量参数定义为裸结构(
like SharpDX does with its raw types).

还有数学库M.

开发人员希望在程序集A中提供隐式运算符,以在数学库M中的完整类型与图形API G(another sample from SharpDX, but in this case the operators are defined in M instead of A)中的原始类型之间进行转换.请注意,两种类型都具有完全相同的内存表示.

Afaik,C#语言中没有办法提供这样的操作符.最接近的是扩展方法,但用户仍需要调用其他方法来进行转换.

是否有可能或者是否通过IL重写添加了这些运算符的样本?根据我有限的知识,我认为这是可能的,但我希望得到关于此事的更多反馈.

谢谢!

最佳答案 你可以通过重写两个库中的一个来实现这一点,具体来说,你可以在类型中添加隐式运算符(并且在此过程中还会添加对其他库的依赖).

但我认为这样做是个坏主意:这意味着你需要使用你自己的库版本(即你不能只使用NuGet的版本),每次你想要升级它,你都需要运行IL重写者再次.

对我来说,这听起来像太多的工作只是为了你可以写Foo(bar)而不是Foo(bar.ToBaz()).

点赞