1、理解接口
多花点时间理解接口和类的关系,以及为什么用接口。
ArcEngine的类实现的方法很多,当你获取一个类的对象时你要用这个类的方法,这时由于方法个数很多(可能上千个)你不知道
用哪个方法好,为此有了接口。
接口可以说是把类的方法进行分类。这样你要获取类的某个方法,先获取类的某个接口,然后再由实现这个接口的类的对象去调用方法。
同一个类的接口之间可以相互转换,因为都是这个类的对象。
接口在类和函数之间找到了一个平衡。这样用户可以很方便的去调用自己所需要的方法。
2、理解对象模型图
能看懂对象模型图才能方便的编程进行代码的编写。
ArcEngine中的类分为三种,要进行区别,要能看懂他们之间的联系。
从对象模型图中你可以得到完成某个任务的大概所用到的那几个接口,然后去详细的查询这些接口的方法的作用。
3、查找资料
在做二次开发的时候遇到问题,首先Google一下,一般能找到解决的方法,甚至代码都有了,只要做一些简单的修改,
当然要有从一个语言转到另一个语言的本领,可能查到的VB的代码,而你要的是C#的代码,其实不管哪种语言,用到的接口都是一样的。
如果Google没有搜索到,那你最好去ESRI英文官方网站论坛进行英文检索,
一般能找到解决方法(我以前很多问题解决方法的都是在ESRI英文官方网站上找到的)。
实在网上找不到可以发帖子问问,我们的论坛就是一个很好的地方,这里有很多高手。
4、误区
切记接口不理解,对象模型图不看,就直接写代码,那样即使你完成了某个功能你也不知道为什么要那样。
其实看一个人写的代码的顺序就知道他对接口的理解水平。
例如:有个人写了如下的一段代码:
static public IElement AddOrbitToLayer(ILayer pLayer, IPolyline pPolyline)
{
IColor rgbColor = new RgbColorClass();
rgbColor.RGB = 255;
ISimpleLine3DSymbol pSimpleLineSymbol3D = new SimpleLine3DSymbolClass();
ILineElement pLineElement = new LineElementClass();
pSimpleLineSymbol3D.Style = esriSimple3DLineStyle.esriS3DLSStrip;
ILineSymbol pLineSymbol = pSimpleLineSymbol3D as ILineSymbol;
pLineSymbol.Color = rgbColor;
pLineSymbol.Width = 2;
pElement.Geometry = pPolyline;
pLineElement.Symbol = pLineSymbol;
IGraphicsContainer pGraphicsContainer = pLayer as IGraphicsContainer;
IElement pElement =pLineElement as IElement;
pGraphicsContainer.AddElement(pElement,2);
return pElement;
}
虽然也能运行通过,也能完成某个功能,但是让人看得很不舒服,也很难看懂似的。
稍微调整一下顺序,写成下面的那样,就显得很有条理,一看就知道程序是怎样进行接口转换的。看起来就舒服多了!
static public IElement AddOrbitToLayer(ILayer pLayer, IPolyline pPolyline)
{
IColor rgbColor = new RgbColorClass();
rgbColor.RGB = 255;
ISimpleLine3DSymbol pSimpleLineSymbol3D = new SimpleLine3DSymbolClass();
pSimpleLineSymbol3D.Style = esriSimple3DLineStyle.esriS3DLSStrip;
ILineSymbol pLineSymbol = pSimpleLineSymbol3D as ILineSymbol;
pLineSymbol.Color = rgbColor;
pLineSymbol.Width = 2;
ILineElement pLineElement = new LineElementClass();
pLineElement.Symbol = pLineSymbol;
IElement pElement =pLineElement as IElement;
pElement.Geometry = pPolyline;
IGraphicsContainer pGraphicsContainer = pLayer as IGraphicsContainer;
pGraphicsContainer.AddElement(pElement,2);
return pElement;
}
如果上面的代码稍加注释就更完美了。