问各位大哥关于接口对象的问题
小弟在看一段程序实在搞不懂,请各位大哥赐教哈!public inte易做图ce IPublish //声明接口
{
IList<PubClassInfo> GetClassList();
}
public class CommonData //这个类没有声明继承IPublish接口
{
private static IPublish DalPublish; //前面已经定义的接口声明一个对象;
public static IList<PubClassInfo> NewsClass = new List<PubClassInfo>();//用泛型实例化一个泛型接口对象
public static void Initialize()
{
NewsClass = CommonData.DalPublish.GetClassList(); //问题在这里!前面只是声明一个接口的
//对象并没有具体的类来实例化它,为什么
//它还能赋值给已经实例化的对象呢?如果
//能赋值给对象,那这个方法里不是没有具
//体内容吗?求各位大哥赐教!
}
}
--------------------编程问答-------------------- CommonData.DalPublish是静态变量,类型是接口IPublish,程序中没有看到这个变量被初始化,缺省被初始化为null,
因为程序不完整,如果这个程序是正确的话,CommonData类应该有一个静态构造器,形如:
static CommonData()
{
DalPublish=new XXXXX();
}
--------------------编程问答-------------------- 接口是伪娘,能生仔? --------------------编程问答-------------------- 这跟接口蛋关系都没有...
人 = new 男人
咬 = new 狗
仅仅是符合继承的语法而已... --------------------编程问答-------------------- 至于那个DalPublish,必然是某个实例...既然是实例,它的类型必然实现了其声明的接口...而怎么实现的不需要你去管,这就是接口的作用... --------------------编程问答-------------------- NewsClass = CommonData.DalPublish.GetClassList();
上边这行其实就是个泛型赋值:
IList<PubClassInfo> NewsClass = IList<PubClassInfo> GetClassList();
正如一楼说的,必须对接口实例化赋值,否则你的代码只是一段演示代码而已。。。
--------------------编程问答-------------------- 在C#中接口是负责功能的定义,项目中通过接口来规范类,而类是负表具体功能的实现。
所以必须对接口方法进行实现,否则你的代码不会执行任何操作. --------------------编程问答--------------------
看来你的测试、跟踪纠结于个别代码,而不是从应用出发的。有很多方法给那个静态变量赋值,比如
CommonData.DalPublish=.....;--------------------编程问答-------------------- 如何从应用出发来理解代码?其实也很简单,关键看你能不能放下纠结心。既然你认为Initialize这个代码是个“伪代码”,不是正规执行的代码,那么就可以把它当即注释掉,然后重新开始测试。根据测试出来的bug,你才去花精力理解它,才来评判是否应该恢复它。而如果测试全都通过,根本没有必要分析它,就可以彻底删除它了,这说明它确实是假的、虚报的工作量。 --------------------编程问答-------------------- 编译不会有问题的 运行的话 如果真的能用 应该有静态构造 或者 静态属性、方法 给DalPublish赋值
CommonData.Initialize();
补充:.NET技术 , C#