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 不是接口名么,这……
耽误高手们几分钟的时间,不知道我的疑惑有没有表达清楚,,但是请大家尽量能解释得尽量平实点。
新手表示要崩溃了
...全文
327 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 ;

110,534

社区成员

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

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

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