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 不是接口名么,这……
耽误高手们几分钟的时间,不知道我的疑惑有没有表达清楚,,但是请大家尽量能解释得尽量平实点。
新手表示要崩溃了
...全文
244 点赞 收藏 12
写回复
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 ;
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告