【发布时间】:2014-01-01 14:48:24
【问题描述】:
我正在阅读“CLR Via C#”一书,在泛型章节中说:
源代码保护
使用通用算法的开发人员不需要访问算法的源代码。但是,对于 C++ 模板或 Java 的泛型,算法的源代码必须可供使用该算法的开发人员使用。
谁能解释一下这是什么意思?
【问题讨论】:
我正在阅读“CLR Via C#”一书,在泛型章节中说:
源代码保护
使用通用算法的开发人员不需要访问算法的源代码。但是,对于 C++ 模板或 Java 的泛型,算法的源代码必须可供使用该算法的开发人员使用。
谁能解释一下这是什么意思?
【问题讨论】:
嗯,泛型类以编译的形式分发,不像 C++,模板需要以完整的源代码分发。因此,您无需分发包含泛型类的库的 C# 源代码。
这不会阻止你的类的接收器反汇编它(因为它被编译为 IL,可以很容易地再次反编译)。为了真正保护代码,需要额外的方法,例如混淆。
幕后花絮:这种编译形式的分布是 C# 泛型和 C++ 模板在编写方式上也不同的原因。 C#泛型类及其方法需要在编译时完全定义,泛型类或其方法定义中的任何错误或对模板参数的任何操作在编译时无法推导都会直接产生编译错误.在 C++ 中,模板仅在使用时编译,并且仅编译实际使用的方法。如果您在模板定义中有未定义的操作甚至语法错误,那么您只会在实际实例化和使用该函数时看到错误。
【讨论】: