首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >项目之间的可访问性问题

项目之间的可访问性问题
EN

Stack Overflow用户
提问于 2011-07-19 05:28:34
回答 2查看 94关注 0票数 2

我有两个库项目: AProject和BProject,还有一个web项目: WebProject。

AProject有一个类:

代码语言:javascript
运行
复制
public class WorkerManager {
    public Worker Get(long workerId) {
        ....
        ....
    }

    public Worker Get(Guid companyId, long workerId) {
        ....
        ....
    }
}

我希望来自BProject的类能够使用Worker Get的第一个版本:

代码语言:javascript
运行
复制
WorkerManager  a=new WorkerManager ();
a.Get(8);

我希望这个方法对web项目是隐藏的。

如果我将Worker Get(long workerId)设为内部,那么BProject将无法使用此方法,而如果我将其设为公共,则web项目将访问此方法。

如何阻止访问web项目并允许访问BProject?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-19 05:31:51

听起来你需要Friend Assemblies

它们基本上允许您将类设为内部类,但指定BProject应该能够访问AProject的内部类。

更新

我实际上从来没有使用过Friend Assemblies,所以我不能给你比谷歌更好的方向。

其他人也提到过使用接口,我同意这通常是一种好方法。但是,它是否适用于您将取决于您的代码结构。假设您将WorkerManager类移动到一个新的项目(C)。项目C依赖于项目B。项目A依赖于C和B。WebProject依赖于A和B。

代码语言:javascript
运行
复制
         /-------------\
WebProject -> A -> C -> B
               \-------/

项目B现在定义了一个接口,如下所示:

代码语言:javascript
运行
复制
public interface IWorkerManager 
{
    public Worker Get(long workerId);
}

项目C中的WorkerManager实现了这个接口:

代码语言:javascript
运行
复制
public class WorkerManager : IWorkerManager {...}

现在项目A可以通过工厂生产IWorkerManager,因此您的网络项目永远不会说new WorkerManager()

代码语言:javascript
运行
复制
public class WorkerManagerFactory
{
    public IWorkerManager Get() {return new WorkerManager();}
}

现在,项目A仍然可以访问其他方法:

代码语言:javascript
运行
复制
new WorkerManager().Get(compGuid, workerId);

..。但是Web Project只能访问接口定义的内容:

代码语言:javascript
运行
复制
new WorkerManagerFactory().Get().Get(workerId);

这说明了一种你可以实现你想要的东西的方法。您可以通过利用依赖注入找到更好的解决方案,但这种解释远远超出了原始问题的范围。

票数 3
EN

Stack Overflow用户

发布于 2011-07-19 05:35:27

您可以使用InternalsVisibleTo attribute并使该方法成为internal

但我不确定这是不是一个好的设计,以这种方式隐藏方法。如果它只是一个实现细节,那么它应该是私有的。如果它是类的公共界面的一部分,那么它应该对所有人公开。两者之间没有太多的空间(忽略派生类和受保护的成员)。

这可能有用的一种情况是单元测试私有功能。可能还有其他用途,但应该是相当罕见的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6739703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档