成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

由C++轉(zhuǎn)向C#簡單介紹

開發(fā) 后端
這里介紹我將重點討論由C++轉(zhuǎn)向C#時最大的變化:由不可管理的環(huán)境向可管理的環(huán)境的變化,還將說明一些C#語言的能夠影響編程的新功能。

C#語言還是比較常見的東西,這里我們主要介紹C++轉(zhuǎn)向C#,包括介紹轉(zhuǎn)向可管理的環(huán)境、Traps、引用類型和值類型等方面。

每隔10年左右,編程人員就需要花費大量的時間和精力去學(xué)習(xí)新的編程技術(shù)。在80年代是Unix和C,90年代是Windows和C++,現(xiàn)在又輪到了微軟的.NETFramework和C#盡管需要學(xué)習(xí)新的技術(shù),但由此帶來的好處卻遠(yuǎn)高于付出的勞動。幸運的是,使用C#和.NET進(jìn)行的大多數(shù)工程的分析和設(shè)計與在C++和Windows中沒有本質(zhì)的變化。在本篇文章中,我將介紹如何實現(xiàn)由C++轉(zhuǎn)向C#的飛躍。

已經(jīng)有許多文章介紹過C#對C++的改進(jìn),在這里我就不再重復(fù)這些問題了。在這里,我將重點討論由C++轉(zhuǎn)向C#時***的變化:由不可管理的環(huán)境向可管理的環(huán)境的變化。此外,我還會提出一些C#編程人員容易犯的錯誤供大家參考,此外,還將說明一些C#語言的能夠影響編程的新功能。

轉(zhuǎn)向可管理的環(huán)境

C++的設(shè)計目標(biāo)是低級的、與平臺無關(guān)的面向?qū)ο缶幊陶Z言,C#則是一種高級的面向組件的編程語言。向可管理環(huán)境的轉(zhuǎn)變意味著你編程方式思考的重大轉(zhuǎn)變,C#不再處理細(xì)微的控制,而是讓架構(gòu)幫助你處理這些重要的問題。例如,在C++中,我們就可以使用new在棧中、堆中、甚至是內(nèi)存中的某一特定位置創(chuàng)建一個對象。

在。NET的可管理環(huán)境中,我們再不用進(jìn)行那樣細(xì)微的控制了。在選擇了要創(chuàng)建的類型后,它的位置就是固定的了。簡單類型(ints、double和 long)的對象總是被創(chuàng)建在棧中(除非它們是被包含在其他的對象中),類總是被創(chuàng)建在堆中。我們無法控制對象是創(chuàng)建在堆中哪個位置的,也沒有辦法得到這個地址,不能將對象放置在內(nèi)存中的某一特定位置。(當(dāng)然也有突破這些限制的方法,但那是很另類的方法。)我們再也不能控制對象的生存周期,C#沒有destructor.碎片收集程序會將對象所占用的內(nèi)存進(jìn)行回收,但這是非顯性地進(jìn)行的。

正是C#的這種結(jié)構(gòu)反映了其基礎(chǔ)架構(gòu),其中沒有多重繼承和模板,因為在一個可管理的碎片收集環(huán)境中,多重繼承是很難高效地實現(xiàn)的。

C#中的簡單類型僅僅是對通用語言運行庫(CLR)中類型的簡單映射,例如,C#中的int是對System.Int32的映射。C#中的數(shù)據(jù)類型不是由語言本身決定的,而是由CLR決定的。事實上,如果仍然想在C#中使用在VisualBasic中創(chuàng)建的對象,就必須使自己的編程習(xí)慣更符合CLR的規(guī)定。

另一方面,可管理的環(huán)境和CLR也給我們帶來了好處。除了碎片收集和所有.NET語言中統(tǒng)一的數(shù)據(jù)類型外,它還提供給我們一個功能強(qiáng)大的面向組件的編程語言,無須對后期綁定提供特別的支持,類型發(fā)現(xiàn)和后期綁定都是被內(nèi)置在語言中的。屬性是C#語言中的***類的成員,事件和代理也是。

可管理環(huán)境最主要的優(yōu)點是.NETFramework.盡管在所有的。NET語文中都可以使用這種框架,但C#可以更好地使用.NET框架中豐富的類、接口和對象。

Traps

C#看起來與C++非常相似,這使得我們在由C++轉(zhuǎn)向C#時比較輕松,但其中也有一些容易出錯的地方。在C++中編寫得非常漂亮的代碼,在C#中會不能通過編譯,甚至?xí)霈F(xiàn)意想不到的結(jié)果。C#與C++之間在語法上的變化并不大,編譯器能夠發(fā)現(xiàn)這二者之間大部分的差異,我在這里就不再多費筆墨了,在這里我介紹幾個容易出問題的比較重要的變化:

引用類型和值類型

在C#中,值類型和引用類型數(shù)據(jù)是有區(qū)別的。簡單類型(int、long、double等)和結(jié)構(gòu)屬于值類型數(shù)據(jù),類和對象屬于引用類型數(shù)據(jù)。除非是包含在引用類型的變量中,與在C++中一樣,值類型變量的值存儲在棧中。引用類型的變量也存儲在棧中,但它的值是一個存儲在堆中的對象的地址,這一點也與C++類似。值類型變量是將自己的值傳遞給方法,而引用類型變量則將自己的指針傳遞給方法。

結(jié)構(gòu)

C#中的結(jié)構(gòu)與C++中有非常明顯的區(qū)別。在C++中,結(jié)構(gòu)更象是類,除了缺省的繼承外,其缺省的訪問權(quán)限是public而不是private.在C#中,結(jié)構(gòu)與類截然不同,它是用來封裝輕型對象的,是值類型的數(shù)據(jù)類型,在傳遞時傳送的是變量的值,而不是其地址。此外,它們也有一些不適用于類的限制,例如,它是不能繼承的,也沒有除System.ValueType之外的基本類。結(jié)構(gòu)還不能定義一個缺省的constructor.

另一方面,由于結(jié)構(gòu)比類的效率要高,因此它非常適合于創(chuàng)建輕型對象。因此,如果它的缺點對你的軟件沒有影響,使用結(jié)構(gòu)比使用類效率要高得多,尤其是對于小對象而言。

【編輯推薦】

  1. C#編程實現(xiàn)顯示XML文件
  2. C#語言獲取要顯示頁面
  3. 創(chuàng)建C# Windows窗體應(yīng)用程序淺析
  4. C#實現(xiàn)窗體顯示背景知識
  5. C# Lazy-Allocate設(shè)計概念
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-19 10:09:21

C#和C++

2009-08-19 09:57:01

C++ RAII

2009-08-13 17:36:54

編譯C#代碼

2009-09-03 09:40:57

C#創(chuàng)建表單

2009-08-06 18:15:13

C# SQL Serv

2009-09-01 16:19:57

C# new()約束

2009-08-20 16:25:59

C# 匿名方法

2009-08-25 13:38:35

C# Timer組件

2009-08-03 17:51:43

C#引用類型

2009-08-14 16:46:44

C#元數(shù)據(jù)

2009-08-07 17:12:07

C# DLL函數(shù)

2009-08-21 17:55:52

C#復(fù)合控件

2009-08-07 17:41:40

C#預(yù)處理

2009-08-27 10:19:22

C#匿名類型

2009-08-18 17:37:57

C#固定指針

2009-08-10 16:19:37

C#冒泡排序

2009-08-14 17:27:56

C#方法參數(shù)

2009-08-06 14:53:41

C# User類

2009-08-12 10:11:18

C# 回調(diào)函數(shù)

2009-08-27 13:37:11

C#類和結(jié)構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产电影一区二区三区爱妃记 | 91国产视频在线观看 | 久久久久久久电影 | 日韩不卡一区二区 | 奇米超碰 | 中文在线一区二区 | 色婷婷久久综合 | 日韩欧美在线视频 | 免费在线观看一级毛片 | 日本理论片好看理论片 | 国产乱码精品一区二区三区中文 | 亚洲啪啪 | 天天搞天天操 | 成人免费网视频 | 国产成人网 | 国产一区不卡 | 亚洲乱码一区二区三区在线观看 | 黑人一级片视频 | 日韩欧美在线观看 | 爱操影视 | 国产精品久久久久久婷婷天堂 | 日韩午夜影院 | 久久黄色 | 狠狠操狠狠操 | 日韩精品视频在线 | 一区二区三区电影在线观看 | 成人性生交大片 | 一级在线免费观看 | 久久99成人| 久久久久久久久久一区 | 日韩久久精品电影 | 午夜a√| 国产精品日本一区二区在线播放 | 国产日韩精品在线 | 久久久福利| 天天看天天操 | 中文字幕日韩欧美 | 美女三区 | 久热中文字幕 | 手机看黄av免费网址 | 人操人人干人 |