我有两个名为HTS.lib.Common
和HTS.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
成员时根本不会:(
任何人都可以知道我们如何配置,以便派生类不可访问,但基本接口和类能够访问。
答案 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"; }
}
}
现在,上面显示的两种访问形式都可以使用。
至于你是应该显式地还是隐式地实现接口,这取决于,如果你有兴趣,还有其他问题在这里讨论。