具有公共访问说明符的类无法访问

时间:2015-09-25 01:06:38

标签: c# asp.net-mvc asp.net-mvc-4 razor

我有两个名为HTS.lib.CommonHTS.lib.Common.Contract

的类库

HTS.lib.Common.Contract我有ModelView类和接口

HTS.lib.Common我有公共类,它继承了HTS.lib.Common.Contract的一些接口,并且有定义,所有接口都是公共类型。

我有一个MVC应用程序,它引用了上述两个项目,我只能访问HTS.lib.Common.Contract个成员而不能访问HTS.lib.Common

我想知道它怎么可能发生,在我的控制器类中我能够通过HTS.lib.Common.Contract的DependencyResolver创建实例。但是,当我尝试访问HTS.lib.Common成员时根本不会:(

任何人都可以知道我们如何配置,以便派生类不可访问,但基本接口和类能够访问。

1 个答案:

答案 0 :(得分:1)

您可能已明确地在公共库中实现了该接口,这意味着您的所有方法都是私有的,只能通过接口访问。举个例子,给出这个界面:

public interface IUser
{
    String Username { get; }
}

您可以通过两种方式实现该接口,首先明确:

public class User : IUser
{
    String IUser.Username
    {
        get { return "Bob"; }
    }
}

在上面的示例中,您只能通过界面访问Username属性,如下所示:

IUser user = new User();
var name = user.Username;

如果直接创建该类,则无法访问该属性:

User user = new User();
var name = user.Username; //won't compile

如果您希望能够以两种方式访问​​该属性,只需“隐式”实现该接口:

public class User : IUser
{
    public String Username
    {
        get { return "Bob"; }
    }
}

现在,上面显示的两种访问形式都可以使用。

至于你应该显式地还是隐式地实现接口,这取决于,如果你有兴趣,还有其他问题在这里讨论。

相关问题