我正在阅读"CLR Via C#"一书,并在泛型章节中说:
源代码protecton
使用通用算法的开发人员无需访问算法的源代码.但是,对于C++模板或Java的泛型,算法的源代码必须对使用该算法的开发人员可用.
任何人都可以解释这究竟是什么意思?
好吧,与C++不同,泛型类以编译形式分发,其中模板需要以完整的源代码分发.因此,您不需要分发包含泛型类的库的C#源代码.
这并不妨碍你的类的接收器反汇编它(因为它编译成IL,可以很容易地再次反编译).要真正保护代码,需要使用其他方法,例如混淆.
在幕后:以编译形式进行的这种分发是C#泛型和C++模板在需要编写方式上也有所不同的原因.C#泛型类及其方法需要在编译时完全定义,并且泛型类或其方法的定义中的任何错误或模板参数上的任何操作都无法在编译时推断出来将直接产生编译错误.在C++中,模板仅在使用时编译,并且仅编译实际使用的方法.如果在模板定义中有未定义的操作或甚至是语法错误,则只有在实际实例化和使用该函数时才会看到错误.