DALFactory.DataAccess 中的
public static PetShop.IDAL.ICategory CreateCategory() {
string className = path + ".Category";
return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
}方法定义成接口类型是什么作用?
public static PetShop.IDAL.ICategory CreateCategory() {
string className = path + ".Category";
return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
}方法定义成接口类型是什么作用?
解决方案 »
- System.Web.UI.ScriptManager”同时存在于两个System.Web.Extensions.dll中
- 求.net检查文件夹中是否有指定文件代码?
- ~~~~~~~~~~~~市场需求调查问卷设计~~~~~~
- 关于框架页面跳转问题
- 问一个小问题
- 求asp.net 2.0 无刷新DropDownList联动源码
- IE WebControls 是用来做什么的
- 怎么解决IE显示图片缩小失真的问题啊?(在线等待,只要解决问题,多少分都给,我有好几千啊,欢迎来取)
- Windows7 装完后,服务中没有ASP.net状态服务 (ASP.NET state server)
- 如何GhostNTFS格式的硬盘???
- 总技术分排名:4444,散分驱悔气....
- iis图片路径问题
从而可以实现完全分离业务层和数据访问层的依赖关系
所以要用接口定义数据访问曾中的成员
改变数据访问层时直接替换数据访问类库dll就可以更换系统数据库种类了
因为接口不需要实现方法体实现多态性
用接口就可以接受不同操作内容的类
灵活
我想知道“interfaceName className”这种形式是为了什么,为什么不用className:interfaceName,不明白其原因
public static PetShop.IDAL.ICategory CreateCategory() {
string className = path + ".Category";
return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
}
参考
http://www.cnblogs.com/smhy8187/articles/859275.html
public static PetShop.IDAL.ICategory CreateCategory() {
string className = path + ".Category";
return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
}
请就针对这种形式讲!谢谢!
{
....... //智能手机自己的扩展代码
}那么,你在一个智能手机管理系统中如果要对所有手机检测cpu那么你的那个方法只要用“电脑”作为参数类型就可以了。
然而,在.net系统大多数“官方”语言以及java中,不支持多重继承,你就不得不写为:public class 智能手机: 通讯工具,Imp4,I电脑
{
....... //智能手机自己的扩展代码 这里必须重复实现一堆Imp4的接口属性和方法
这里必须重复实现一堆Imp4的接口属性和方法
这里必须重复实现一堆Imp4的接口属性和方法
这里必须重复实现一堆Imp4的接口属性和方法
这里必须重复实现一堆Imp4的接口属性和方法
............ 这里必须重复实现一堆I电脑的接口属性和方法
这里必须重复实现一堆I电脑的接口属性和方法
这里必须重复实现一堆I电脑的接口属性和方法
这里必须重复实现一堆I电脑的接口属性和方法
这里必须重复实现一堆I电脑的接口属性和方法
............
}
实际上许多class因为我们已经让它从一个class继承了,我们要让它从其它class继承已经不可能,只能造出interface来这样使用。这样,你在一个智能手机管理系统中如果要对所有手机检测cpu那么你的那个方法只要用“I电脑”作为参数类型。
这是不得已,我们去写Imp4和I电脑。interface的双刃剑问题就出来了,有人认为这提供高了class灵活性,有人认为这降低了class的灵活性。
interface中不能声明有静态方法,但是静态方法完全可以返回一个interface类型的对象的。
LZ问的是这个方法的声明还是签名?还是其它地方的事..
/// Interface to the Item DAL
/// </summary>
public interface ICategory{ 定义的方法略
}
}namespace PetShop.SQLServerDAL { public class Category : ICategory { 内容略
}namespace PetShop.DALFactory {public sealed class DataAccess {
public static PetShop.IDAL.ICategory CreateCategory() {
string className = path + ".Category";
return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
}
}
}其中是不是因为Category是ICategory的实现类,所以反射要返回的类型就是ICategory呢,如果不返回ICategory类型会怎么样呢?
...如果不返回怎么样,估计,谁也没有办法(不会你想做些漏洞?)所以
(PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
语句中就是用了强制类型转换
嗯,只能从旁(从无需interface的OO语言如何实现这个功能)来对比地回答。结果我却发现,这实际上是在说interface的坏话。