直接实例化类或通过c#中的控制接口实例化它之间的区别

时间:2010-02-25 07:17:42

标签: c# oop

我正在开发一个具有三层实现的asp.net项目。 DataAccess Layer就在那里.DataAccessContract是一个层,它包含dataaccess层实现的所有类的接口。同样,我们有一个业务层和一个businessLayer契约。

现在,当我们从业务层调用数据访问时,我们调用

IUserDAL userControllerDAL=new UserDAL();

UserDAL位于DataAccess中,IUserDAL位于DataAccessContract内。

我本可以这样做的

UserDAL user=new UserDAL();

这两种方法之间的区别是什么,第一种方法优于第二方法。是第一种情况下的一些模式。请用一些例子来解释。

5 个答案:

答案 0 :(得分:2)

对象以完全相同的方式实例化,但是您可以从该对象访问的内容是不同的。通常,界面提供的功能较少,如果您不希望开发人员执行某些操作,这可能是一件好事。或者可以对对象中的某些方法进行显式声明,只能通过接口访问。

答案 1 :(得分:0)

目的是将合同(您正在使用的接口)与实现(实现该接口的类)分开。

假设您要实现一个结果随机化DAL(仅仅是为了它)。如果选项1,您需要从DAL继承,或修改使用DAL的所有地方。

继承是有问题的:DAL实现可能已被密封,您可能希望继承其他内容等。

在第二种情况下,您使您的类独立,只需更改实例化:

IUserDAL dal;
if (AprilFirst)
   dal = new ReasultRandomizingUserDAL();
else
   dal = new UserDAL();

实例化的对象本身是相同的。

答案 2 :(得分:0)

我想补充一点,使用接口更适合实现IoC容器。

答案 3 :(得分:0)

如果您想使用控制反转,那么有一个很大的优势。你可以谷歌谈论它。

答案 4 :(得分:-1)

请参阅Why are interfaces important

它应该回答你的问题:D