gpt4 book ai didi

c# - 不同级别的方法访问

转载 作者:行者123 更新时间:2023-11-30 20:46:56 25 4
gpt4 key购买 nike

情况:

我正在创建 2 个库:X1.dll 和 X2.dll。它们是单独创建和修改的,它们的项目不能合并为一个解决方案。

X1.dll 包含类 C1 的定义。X2.dll 包含类 C2 的定义。

X2.dll 引用 X1.dll。

C1 类有一个方法 M1()。该方法在 X2.dll 中使用,这就是为什么将 M1() 设为公共(public)方法的原因。

我将 X1.dll 和 X2.dll 分发给其他开发人员。但我不希望他们调用 M1() - 他们可以对 C1 实例做任何他们想做的事,但不要接触 M1()。同时,M1() 已经公开,因为我必须能够在 X2.dll 中调用它。

问题:

组织 M1() 以使其仅对我可用但仍不合并 X1.dll 和 X2.dll 的项目的最佳方式是什么?

有很多笨拙的解决方案,例如将 M1() 制作为 M1(string SecreteCode) 并对这个 SecreteCode 进行硬编码,所以我是唯一一个可以将其作为正确参数传递的人。

但是实现这个目标的最佳实践是什么?

感谢您的任何建议!

最佳答案

制作 M1() internal 并添加 InternalsVisibleToAttribute在程序集上允许 X2.dll 调用 X1.dllinternal 代码。此解决方案使 X1 中的所有 internal 代码在 X2 中可见,但您确定没有其他人可见将调用 M1()

来自文档:

Ordinarily, types and members with internal scope (in C#) and friend scope (in Visual Basic) are visible only in the assembly in which they are defined. The InternalsVisibleToAttribute attribute makes them also visible to the types in a specified assembly, which is known as a friend assembly.

只需将 [assembly:InternalsVisibleTo("X2")] 添加到您的程序集中即可。如果您的程序集已签名,您需要像这样添加强名称 key 的公钥 [assembly:InternalsVisibleTo("X2, PublicKey=0000000000")]

这比“ secret 代码”更好,因为 C# 代码很容易反编译,您的 secret 不会长期保密!

关于c# - 不同级别的方法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26289700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com