使同一项目中的其他 类 可以访问函数,但不能在另一个项目中访问

Making functions accessible from other classes in same project but not in another Project

我有一个名为 Category_Helper_Project 的项目。

在此项目中有两个相关的 classes:Category_InterfaceCategory_File_Manager

这个项目的目的是可以从其他项目中引用。它在 creating/accessing 类别时自动处理底层文件系统。

为此,class Category_Interface 访问 class Category_File_Manager。由于这个原因,Category_File_Manager 中的函数是 public。

如果我从另一个项目引用 Category_Helper_Project,是否可以使 Category_File_Manager 无法从其他项目访问,同时保持它可以从 Category_Interface? Accessing Category_File_Manager` 直接访问可能会导致树结构出现问题。

最后我想知道使 Category_File_Manager 不可访问是否也会使其在单元测试中无法访问,这将是非常不幸的。

我发现了一些类似的问题,例如 Making a function only accessible from one other function 但他们并没有真正回答我的问题。

要控制 class 可访问性,您需要在其声明之前添加一个关键字:

public class Category_File_Manager 

如果您不添加 public,它默认为 internal,这将导致 class 可从声明它的 project/library 访问,而无法从任何其他,包括测试。

为了测试库的好处,您可以使用 InternalsVisibleTo 程序集级别属性来规避此问题。

[assembly: InternalsVisibleToAttribute("Category_Helper_Project_Tests")]

这有点代码味道,您的库在某种程度上了解测试库,但这是吃蛋糕和吃蛋糕的情况。从生产代码中删除这种访问是个好主意,所以如果它没有添加到发布版本中,我会将其包装在编译中。

#if DEBUG
[assembly: InternalsVisibleToAttribute("Category_Helper_Project_Tests")]
#endif

因为我一遍又一遍地阅读了你的问题,我认为你想对其他项目隐藏一个 class 并且还可以从 Category_File_Manager 内部访问它 这不能用一个访问修饰符来完成,你应该简单地将 Category_Interface 设置为内部以从外部隐藏它,并创建另一个 class 只需要 API 从 Category_File_Manager 内部传递出去 更多 您可以阅读 here 关于访问修饰符的内容