我從事Windows平臺(tái)下的C++編程和C#編程,對(duì)比兩者,毫無(wú)疑問(wèn)C#的編程方式讓人非常舒適,雖然也有解決問(wèn)題的難度,但是大多數(shù)時(shí)候,開(kāi)發(fā)的過(guò)程中關(guān)心的問(wèn)題都是業(yè)務(wù)上面的解決方案,而C++的開(kāi)發(fā)至今位置還是困擾我心,對(duì)比了一下C#和C++的GUI編程,有以下的重要區(qū)別:
1.C#因?yàn)槭腔?/span>.NET的,所以是RAD方式的編程方式,而C++雖然有所謂的VC IDE環(huán)境,但是相對(duì)于C#,簡(jiǎn)直是處于史前時(shí)代;
2.又是因?yàn)?/span>C#基于.NET,微軟又給.NET提供了完善的支持,導(dǎo)致C#在語(yǔ)法的舒適程度上超越C++很多,C++的語(yǔ)法太復(fù)雜了,更多的時(shí)候會(huì)因?yàn)檎Z(yǔ)法的困難帶來(lái)很多不必要的麻煩;
3.C#的.NET框架提供了很多基礎(chǔ)的必要的庫(kù),比如操作XML的庫(kù)、操作數(shù)據(jù)庫(kù)的庫(kù)、簡(jiǎn)單而又方便的完全Unicode化的字符串,這些都是現(xiàn)在C++所不具備的,但是C++有強(qiáng)大的和CPU內(nèi)存一對(duì)一映射的關(guān)系,導(dǎo)致用C++寫(xiě)代碼可以對(duì)各種資源做很好的控制,這一點(diǎn)C#又不是很容易做到;
4.C#因?yàn)槭?/span>RAD工具,所以做起界面來(lái),很方便,再加上語(yǔ)法級(jí)別支持的事件、委托、多線程等支持,令C#如虎添翼,而C++則需要借助一些很難使用很難理解,并且很難編譯的開(kāi)源庫(kù)才能支持這些東西,這導(dǎo)致了C++的門(mén)檻很高。
現(xiàn)在我使用WTL發(fā)現(xiàn)WTL總體來(lái)講因?yàn)槭墙⒃?/span>ATL之上,所以還是一個(gè)很輕便的UI Framework,但是整體的架構(gòu)還是比較完善,可以很方便的編寫(xiě)Component,但是由于我的水平不夠,經(jīng)常在使用方式上有所錯(cuò)誤,導(dǎo)致經(jīng)常遇到一些很難除的Bugs。但是同樣的WTL提供的是一種UI Framework,所以別的諸如Unicode/XML/數(shù)據(jù)庫(kù)這些東西的支持很差勁,基本上沒(méi)有,要么只有自己寫(xiě),要么就只有用微軟的COM組件提供的一些,但是它對(duì)COM組件的使用方式又沒(méi)有進(jìn)行封裝,又導(dǎo)致使用起來(lái)非常困難。所以如果要加速C++開(kāi)發(fā)軟件的進(jìn)度,必須改善這些問(wèn)題。
需要改善的內(nèi)容:
1.Unicode字符串的支持,可以方便的進(jìn)行國(guó)際化軟件的開(kāi)發(fā);
2.XML的完善支持,雖然有一些網(wǎng)絡(luò)上開(kāi)源的XML庫(kù),但是還是不好用,也許是因?yàn)閲?guó)外的社區(qū)對(duì)Unicode并不關(guān)心,還有一些別的因素,包括.NET Framework對(duì)XML的支持都不是完美;
3.徹底完善的掌握一個(gè)C++ UI Framework的使用,這點(diǎn)也是最重要的,否則不可能用C++在Windows平臺(tái)下寫(xiě)軟件;
當(dāng)然,C++開(kāi)源界提供了很多解決方案,但是想像一個(gè)項(xiàng)目中用到N多開(kāi)源項(xiàng)目,對(duì)于任何人來(lái)講都是難以學(xué)習(xí)和掌握的,特別是現(xiàn)在C++開(kāi)發(fā)人員整體素質(zhì)并不是很高的情況下。如果有一個(gè)C++ GUI Framework提供了簡(jiǎn)易的學(xué)習(xí)曲線,強(qiáng)大的GUI設(shè)計(jì),完美的Unicode支持(不要以為wchar_t那樣一下就叫完美Unicode支持了),C++的語(yǔ)言本身再進(jìn)行一些改革,一切就完美了。
上面的文章有點(diǎn)語(yǔ)無(wú)倫次,各位不要見(jiàn)怪!謝謝大家聽(tīng)我這么多廢話!