C# 新手问题

whatdoyousay 2014-07-28 04:16:49
以下是一段ArcGIS Engine开发中的一段代码

IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); //1
IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); //2
IFeatureWorkspace pFWs = pWs as IFeatureWorkspace; //3
IFeatureClass pFClass = pFWs.OpenFeatureClass("PointTest");


这里的IWorkspace ,IWorkspaceFactory是接口名,但相互不具继承关系,AccessWorkspaceFactoryClass是实现IWorkspaceFactory的类。

问题是
1,实例化的格式不是:类名 对象名 = new 类名 ,为什么会出现1和2处的情况
AccessWorkspaceFactoryClass pWsFt = new AccessWorkspaceFactoryClass();和上面代码第一句有什么区别?
2,IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); 这句的格式是 接口 对象名1=xx,这是要做什么
3,第三句看起来是强制类型转化,但是IFeatureWorkspace 不是接口名么,这……
耽误高手们几分钟的时间,不知道我的疑惑有没有表达清楚,,但是请大家尽量能解释得尽量平实点。
新手表示要崩溃了
...全文
378 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
whatdoyousay 2014-07-29
  • 打赏
  • 举报
回复
引用 8 楼 smthgdin 的回复:
1.接口名 实例名 = new 类名();这么写完全没有问题。你认识的只是创建对象的1种情况。 2.pWs这个实例,即实现了IWorkspace接口又实现了IFeatureWorkspace。 3.你那段代码为何这么写,估计也是因为这些代码接近接口的代码。可能外部就直接调用这些代码。
谢谢,除了第三点不太明白,其他的都明白了
埋头苦练 2014-07-28
  • 打赏
  • 举报
回复
引用 8 楼 smthgdin 的回复:
1.接口名 实例名 = new 类名();这么写完全没有问题。你认识的只是创建对象的1种情况。 2.pWs这个实例,即实现了IWorkspace接口又实现了IFeatureWorkspace。 3.你那段代码为何这么写,估计也是因为这些代码接近接口的代码。可能外部就直接调用这些代码。
+1
欢乐的小猪 2014-07-28
  • 打赏
  • 举报
回复
引用 9 楼 liuhuibing12 的回复:
明白了,自己动手一下就明白了,总是渴求从别人那里直接获取答案,自己不想。 虽然这句话的后一句有点像,信不信我分分钟砍死你
好可爱的程序员
whatdoyousay 2014-07-28
  • 打赏
  • 举报
回复
引用 7 楼 hbu_pig 的回复:
你去掉试试 [quote=引用 6 楼 liuhuibing12 的回复:] [quote=引用 4 楼 hbu_pig 的回复:] 3 转换为IFeatureWorkspace类型
3行这里可以去掉后面的as IFeatureWorkspace么? 因为前面也写了返回类型是IFeatureWorkspace pFWs了 [/quote][/quote] 明白了,自己动手一下就明白了,总是渴求从别人那里直接获取答案,自己不想。 虽然这句话的后一句有点像,信不信我分分钟砍死你
smthgdin_020 2014-07-28
  • 打赏
  • 举报
回复
1.接口名 实例名 = new 类名();这么写完全没有问题。你认识的只是创建对象的1种情况。 2.pWs这个实例,即实现了IWorkspace接口又实现了IFeatureWorkspace。 3.你那段代码为何这么写,估计也是因为这些代码接近接口的代码。可能外部就直接调用这些代码。
欢乐的小猪 2014-07-28
  • 打赏
  • 举报
回复
你去掉试试
引用 6 楼 liuhuibing12 的回复:
[quote=引用 4 楼 hbu_pig 的回复:] 3 转换为IFeatureWorkspace类型
3行这里可以去掉后面的as IFeatureWorkspace么? 因为前面也写了返回类型是IFeatureWorkspace pFWs了 [/quote]
whatdoyousay 2014-07-28
  • 打赏
  • 举报
回复
引用 4 楼 hbu_pig 的回复:
3 转换为IFeatureWorkspace类型
3行这里可以去掉后面的as IFeatureWorkspace么? 因为前面也写了返回类型是IFeatureWorkspace pFWs了
whatdoyousay 2014-07-28
  • 打赏
  • 举报
回复
引用 2 楼 bdmh 的回复:
接口可以被实例化,建议你先了解一下接口的 用法
可以用这种形式替换第一行么 AccessWorkspaceFactoryClass pWsFt = new AccessWorkspaceFactoryClass()
欢乐的小猪 2014-07-28
  • 打赏
  • 举报
回复
3 转换为IFeatureWorkspace类型
欢乐的小猪 2014-07-28
  • 打赏
  • 举报
回复
2 pWsFt调用IWorkspaceFactory接口的OpenFromFile方法,返回值为IWorkspace类型
bdmh 2014-07-28
  • 打赏
  • 举报
回复
接口可以被实例化,建议你先了解一下接口的 用法
欢乐的小猪 2014-07-28
  • 打赏
  • 举报
回复
1 var result= pWsFt as IWorkspaceFactory ;
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL表格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧