使同一项目中的其他 类 可以访问函数,但不能在另一个项目中访问
Making functions accessible from other classes in same project but not in another Project
我有一个名为 Category_Helper_Project
的项目。
在此项目中有两个相关的 classes:Category_Interface
和 Category_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 关于访问修饰符的内容
我有一个名为 Category_Helper_Project
的项目。
在此项目中有两个相关的 classes:Category_Interface
和 Category_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 关于访问修饰符的内容