Bentley的产品二次开发用C#还是C++?以及学习路线是什么?

身边有一些对二次开发感兴趣的朋友,在初学阶段经常问我,“我要想做PowerCivil的二次开发学哪门语言好”,“我想做一个Microstation的二次开发,从哪入手”等等,这些问题都是大家初次接触Bentley家的产品二次开发时遇到的基础问题,就像开发windows程序一样“哪个是入口函数”。
 
回到题目上来,对于B家的产品来说两种语言都可以,因为B家为两种语言都提供了API,学哪种语言都能够在B家的平台上进行开发,而最高境界就是同时使用两种语言同时使用,充分利用他们的语言特性。
 
当你看到上面的回答时,你可能会问哪个方式更简单一些,入门更快一些?
下面我简单的对这两种语言在B家平台上的应用对比分析一下。
 
一、从语言特性上分析
在语言层面上两种语言都是面向对象的语言,学习C++和学习C#的学习成本差不多,由于C#是微软家的东西,因此在windows平台上开发产品,用C#可以很方便的进行UI设计,调用office的API等微软家自己的东西,另外C#的运行环境.NET,采用了CLR核心,简单的说就是C#可以很方便的调用其它语言开发的库以及快速的完成UI设计等优点。对于C++来说,其优势在于对系统进行低级控制,运行效率上也较高一些,(不过插一点我认为在语言上效率的提高不如在程序的逻辑上去下功夫,少一个循环,少调用一次函数等提高的效率更多更有效).另外由于C++是从c发展而来,是C的超集,因此也保留了C的特性,所以对于以前用过C编写过面向函数式程序的同学来说,学习C++的成本更低一些。最后,从语言层面整体考虑,从C#入手更快一些,尤其对于新手能够快速的做出一个东西来,能很好的提高自信心:)。
 
二、Bentley的产品对两种语言的支持
虽然Bentley对两种语言都给出了相应的API,但从数量上和功能上来讲C++的比C#的要多一些,因此C++能更灵活的操作B家的产品。但是灵活性的提升和功能性的强大也意味着使用的复杂性提高,尤其是对内存的控制,初学者很容易忘记释放内存,导致泄露,而C#在这方面就有很大的优势,由于采用托管机制,在使用是不需要考虑内存释放的问题,另外C#采用了真正的面向对象机制,因此在使用B家提供的C#的API时,你会惊奇的发现很多要在C++中自己写的内容都已经被B家写进了API,C++中要写好几行的代码,C#一行就搞定。
最后总结,当你在初期时没有太复杂的操作是从C#入手,是一个很好的选择。
 
三、其他方面的一些比较
除了上面两个主要方面外,在开发程序是有很多小问题也经常困扰着我们,比如说B家的产品升版了,如果你用了C++开发的DLL,你会发现不能在新版本上用了,而用C#的插件还能继续使用,这是因为C#是动态编译的,而C++则需要针对不同的版本分别去编译。
另外,在.NET平台上,微软推出了托管式C++,使得C++程序也有了C#的垃圾回收机制,但如果你使用的是MDL的API,同样要自己管理代码中非托管部分的内存,对于托管模式和非托管模式可以参考微软相关的教程(推荐 CLR VIA C#)
通过上面的分析,你已经能看出我的观点了:“初级入门的同学还是从C#入门更简单快速”。
 
那么,又有人会接着问我,你说的最高境界是两种语言混着用,是一种什么样的方式?
下面我再来回答这个问题。
 
通过上面的对比分析可以发现C#简单快速,能方便的调用其它语言的库,更重要的是UI开发非常方便,而C++则在性能效率,灵活深入等方面有优势,所以我们在开发程序时,界面的设计和程序逻辑的控制采用C#是非常合适的,而对B家产品进行复杂的几何元素创建和控制上使用C++是最好的方式。
 
对于像进行B家产品二次开发的同学,我给一个学习路径供你参考:
 
1.学习C#语言,推荐C#入门经典 这本书,网盘地址 链接:http://pan.baidu.com/s/1eSpwBn0 密码:wayl
2.学习本站的 《基于C#的Addin方式的MicroStation二次开发 快速入门系列》教程
3.学习B家提供的C#版的API,如果这些内容不满足你的要求,可进入下一步学习。
4.学习C++,推荐C++ PRIMER红宝书,学习C++必备书籍 网盘地址 链接:http://pan.baidu.com/s/1eS2TKGy 密码:opja  ,另外对于托管式C++,推荐VISUAL C++ 2010入门经典  网盘下载: 链接:http://pan.baidu.com/s/1hslUI1I 密码:2ld5
5.学习B家的MDL开发教程以及B家提供MDL的API。
6.另外由于B家的产品众多,涉及范围广,所以你还会接触到ECFrameWork,CivilFrameWork等等内容,这一以后再分享给大家
 
已邀请:

ahu2016

赞同来自:

好文。受教了。赞!!!

要回复问题请先登录注册