当前位置:编程学习 > C#/ASP.NET >>

问各位大哥关于接口对象的问题

小弟在看一段程序实在搞不懂,请各位大哥赐教哈!

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#中接口是负责功能的定义,项目中通过接口来规范类,而类是负表具体功能的实现。
所以必须对接口方法进行实现,否则你的代码不会执行任何操作. --------------------编程问答--------------------
引用楼主 zb200054 的回复:
问题在这里!前面只是声明一个接口的
  //对象并没有具体的类来实例化它,为什么

看来你的测试、跟踪纠结于个别代码,而不是从应用出发的。有很多方法给那个静态变量赋值,比如
CommonData.DalPublish=.....;
CommonData.Initialize();
--------------------编程问答-------------------- 如何从应用出发来理解代码?其实也很简单,关键看你能不能放下纠结心。既然你认为Initialize这个代码是个“伪代码”,不是正规执行的代码,那么就可以把它当即注释掉,然后重新开始测试。根据测试出来的bug,你才去花精力理解它,才来评判是否应该恢复它。而如果测试全都通过,根本没有必要分析它,就可以彻底删除它了,这说明它确实是假的、虚报的工作量。 --------------------编程问答-------------------- 编译不会有问题的  运行的话 如果真的能用 应该有静态构造 或者 静态属性、方法 给DalPublish赋值
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,