【问题标题】:How do Generics in C# provide source code protectionC# 中的泛型如何提供源代码保护
【发布时间】:2014-01-01 14:48:24
【问题描述】:

我正在阅读“CLR Via C#”一书,在泛型章节中说:

源代码保护

使用通用算法的开发人员不需要访问算法的源代码。但是,对于 C++ 模板或 Java 的泛型,算法的源代码必须可供使用该算法的开发人员使用。

谁能解释一下这是什么意思?

【问题讨论】:

    标签: c# generics


    【解决方案1】:

    嗯,泛型类以编译的形式分发,不像 C++,模板需要以完整的源代码分发。因此,您无需分发包含泛型类的库的 C# 源代码。

    这不会阻止你的类的接收器反汇编它(因为它被编译为 IL,可以很容易地再次反编译)。为了真正保护代码,需要额外的方法,例如混淆。

    幕后花絮:这种编译形式的分布是 C# 泛型和 C++ 模板在编写方式上也不同的原因。 C#泛型类及其方法需要在编译时完全定义,泛型类或其方法定义中的任何错误或对模板参数的任何操作在编译时无法推导都会直接产生编译错误.在 C++ 中,模板仅在使用时编译,并且仅编译实际使用的方法。如果您在模板定义中有未定义的操作甚至语法错误,那么您只会在实际实例化和使用该函数时看到错误。

    【讨论】:

    • 对,这个问题回答了为什么 C++ 需要完整的源代码。
    • @CodeCaster- 感谢您的链接。我今天也学到了一些东西。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多