国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

A Comparative Overview of C#中文版(一)

A Comparative Overview of C#中文版(一)

更新時間:2022-05-01 文章作者:未知 信息來源:網絡 閱讀次數:

A Comparative Overview of C#中文版(上篇)
作者:Ben Albahari
公司:Genamics
日期:2000年7月31日初版,2000年8月10日修訂。
感謝以下人士支持和反饋(按字母先后順序):Don Box、 C.R. Manning、 Joe Nalewabau、 John Osborn、 Thomas Rhode & Daryl Richter。
譯者:榮耀
【譯序:C#入門經典!希望文中針對新手的譯注不會影響閱讀的流暢性。限于譯者時間和能力,文中倘有訛誤,當以英文原版為準】

本文將以C#提供的新的編程方式以及它是如何改進兩個近鄰—Java和C++為中心。C#在很多方面和Java用了類似的方式改進C++。因此,我不打算重復諸如單根對象層次的優點之類的東西。正文將以C#和Java的相似之處概述開始,然后著重探究C#新特性。
背景
 2000年6月,微軟同時宣布了.NET平臺和一個名為C#的新的編程語言。C#是一個很好地融合了簡單、表達力、性能的強類型的面向對象的語言。.NET平臺以公共語言運行時(類似于Java虛擬機)和一個可被多種語言(它們可以通過編譯成中間語言從而可以協同工作)共用的庫為中心。C#和.NET有那么一點共生關系—C#的一些特性和.NET協作得很好,反之亦然(盡管.NET的目標是和多種語言很好地協作)。本文主要關注于C#,但視需要偶爾也會提及.NET。C#的設計借鑒了多種語言,但最主要的還是Java和C++。它是由Anders Hejlsberg(大名鼎鼎的Delphi【譯注:說成Object Pascal更合適些】語言設計師)和Scott Wiltamuth共同設計的。
目錄
1. C#和Java
2. 屬性
3. 索引器
4. 委托
5. 事件
6. 枚舉
7. 集合和foreach語句
8. 結構
9. 類型一致
10.操作符重載
11.多態
12.接口
13.版本處理
14.參數修飾符
15.特性【譯注:即attribute,我在《C#首席設計師Anders Hejlsberg專訪》譯文中(參見CSDN的http://www.csdn.net/develop/article/11/11580.shtm)曾說過,到目前為止,該詞譯法仍較混亂,甚至和property不分,都被譯為“屬性”(Visual Studio.NET 7.0 Beta 2 的聯機文檔就是如此)。但本文中,仍將其譯為“特性”,以示區分】
16.選擇語句
17.預定義類型
18.字段修飾符
19.跳轉語句
20.組合體、名字空間和訪問級別【譯注:Assembly一詞譯法比較混亂,有的譯為“配件”,有的譯為“組件”,有的譯為“組合體”,而Visual Studio.NET 7.0 Beta2聯機文檔上則譯為“程序集”,從技術上講,這個譯法說的倒很事實,但總感覺和這個詞的外觀遠了點,在譯法尚未統一之前,本文暫譯為“組合體”】
21.指針運算
22.多維數組【譯注:這一節里還談到了交錯數組】
23.構造器和析構器
24.受控執行環境
25.庫
26.互用性
27.結論
1.C#和Java
下面是C#和Java共有的特性列表,目的都是為了改進C++。這些特性雖非本文重點,但了解它們之間的相似之處還是很重要的。
l編譯為機器獨立、語言獨立的代碼,運行在受控執行環境里;
l采用垃圾收集機制,同時摒棄了指針(C#中,指針被限制在標為unsafe的代碼內使用);
l強有力的反射能力;
l沒有頭文件,所有的代碼都在包或組合體里,不存在類聲明的循環依賴問題;
l所有的類都派生自object,且必須用new關鍵字分配在堆上;【譯注:Java中為Object;C#中為object,相當于.NET的System.Object】
l當進入標為鎖定/同步代碼時,通過在對象上加鎖來支持多線程;【譯注:例如Java中可對方法施以synchronized關鍵字,在C#中可使用Monitor類、Mutex類、lock語句等等】
l接口支持—多繼承接口,單繼承實現;
l內部類;
l類繼承時無需指定訪問級別;【譯注:在C++中,你可以這么做:class cls2: private cls1{};等等】
l沒有全局函數或常量,一切都必須屬于類;
l數組和字符串都保存長度記數并具邊界檢查能力;
l永遠使用“.”操作符,不再有“->”、“::”操作符;
lnull和boolean/bool是關鍵字;【譯注:Java中為boolean、C#中為bool,相當于System.Boolean】
l所有的值在使用前必須被初始化;
lif語句不能使用整型數為判別條件;
ltry語句塊后可以跟finally從句。【譯注:標準C++不可以,但Visual C++對SEH做了擴展,可以用__try和__finally】
2.屬性
 對于Delphi和Visual Basic的用戶來說,屬性是個熟悉的概念。使用屬性的目的是將獲取器/設置器[譯注:原文為getter/setter]的概念正式化,這是一個被廣泛使用的模式,尤其是在RAD(快速應用開發)工具里。
 以下是你可能在Java或C++里寫的典型代碼:
foo.setSize (getSize () + 1);
label.getFont().setBold (true);
 同樣代碼在C#里可能會變成:
foo.size++;
label.font.bold = true;
C#代碼對于使用foo和label的用戶來說更直觀、更可讀。在實現屬性方面,差不多同樣簡單:
Java/C++:
public int getSize()
{
return size;
}
public void setSize (int value)
{
size = value;
}
C#:
public int Size
{
get {return size;}
set {size = value;}
}
特別是對于可讀寫的屬性,C#提供了一個處理此概念的更清爽的方式。在C#中,get和set方法是內在的,而在Java和C++里則需人為維護。C#的處理方式有諸多優點。它鼓勵程序員按照屬性的方式去思考—把這個屬性標為可讀寫的和只讀的哪個更自然?或者根本不應該為屬性?如果你想改變你的屬性的名稱,你只要檢查一處就可以了(我曾看到過中間隔了幾百行代碼的獲取器和設置器【譯注:此處是指C++(Java)里對同一個數據成員/字段(一般來說是)的獲取器和設置器】)。注釋也只要一處就可以了,這也避免了彼此同步的問題。IDE【譯注:集成開發環境】是可以幫助做這個事的(事實上,我建議他們這么做【譯注:此處的“他們”應該是指微軟有關人員】),但應該牢記編程上的一個基本原理—盡力做好模擬我們問題空間的抽象。一個支持屬性的語言將有助于獲得更好的抽象。
【作者注:關于屬性的這個優點的一個反對意見認為:當采用這種語法時,你搞不清是在操縱一個字段還是屬性。然而,在Java(當然也包括C#)中,幾乎所有真正復雜一點的類都不會有public的字段。字段一般都只具有盡可能小的訪問級別(private/protected,或語言所定義的缺省的),并且只通過獲取器和設置器方法暴露,這也意味著你可以獲得優美的語法。讓IDE解析代碼也是完全可行的,可用不同的顏色高亮顯示屬性,或提供代碼完成信息以表明它是否是一個屬性。我們還應該看到,如果一個類設計良好,這個類的用戶將只關心該類的接口(或規范)【譯注:此處是指該類向其客戶公開(不單單是public,對其派生類來說,也可能是protected)的方法、屬性(C++/Java無顯式屬性概念)等,這里的客戶包括其派生類等等】,而不是其內部實現。另外一個可能的爭論是屬性不夠有效率。事實上,好的編譯器可以內聯僅返回某個字段的獲取器,這和直接訪問字段一樣快。說到底,即使使用字段要比獲取器/設置器來的有效,使用屬性還有如下好處—日后可以改變屬性的字段【譯注:是指可以改變獲取器/設置器的實現代碼部分,比如改變獲取器/設置器里所操作的字段,也可以在獲取器/設置器里做一些校驗或修飾工作等】,而不會影響依賴于該屬性的代碼】
3.索引器
 C#通過提供索引器,可以象處理數組一樣處理對象。特別是屬性,每一個元素都以一個get或set方法暴露。
public class Skyscraper
{
Story[] stories;
public Story this [int index]
{
get
{
return stories [index];
}
set
{
if (value != null)
{
stories [index] = value;
}
}
}
//...
}
Skyscraper empireState = new Skyscraper (/*...*/);
empireState [102] = new Story ("The Top One", /*...*/);
【譯注:索引器最大的好處是使代碼看上去更自然,更符合實際的思考模式】
4.委托
 委托可以被認為是類型安全的、面向對象的函數指針,它可以擁有多個方法。委托處理的問題在C++中可以用函數指針處理,而在Java中則可以用接口處理。它通過提供類型安全和支持多方法改進了函數指針方式;它通過可以進行方法調用而不需要內部類適配器或額外的代碼去處理多方法調用問題而改進了接口方式。委托最重要用途是事件處理,下一節將通過一個例子加以介紹。
5.事件
 C#提供了對事件的直接支持。盡管事件處理一直是編程的基本部分,但令人驚訝的是,大多數語言在正式化這個概念上所做的努力都微乎其微。如果看看現今主流框架是如何處理事件的,我們可以舉出如下例子:Delphi的函數指針(稱為閉包)和Java的內部類適配器,當然還有Windows API消息系統。C#使用delegate和event關鍵字提供了一個清爽的事件處理方案。我認為描述這個機制的最好的辦法是舉個例子來說明聲明、觸發和處理事件的過程:
// 委托聲明定義了可被調用的方法簽名【譯注:這里的簽名可以理解為“原型”】
public delegate void ScoreChangeEventHandler (int newScore, ref bool cancel);
// 產生事件的類
public class Game
{
//注意使用關鍵字
public event ScoreChangeEventHandler ScoreChange;
int score;
// 屬性Score
public int Score
{
get
{
return score;
 }
set
{
if (score != value)
{
bool cancel = false;
ScoreChange (value, ref cancel);
if (! cancel)
score = value;
}
}
}
}
// 處理事件的類
public class Referee
{
public Referee (Game game)
{
// 監視game中的score的分數改變
game.ScoreChange += new ScoreChangeEventHandler (game_ScoreChange);
}
// 注意這個方法簽名和ScoreChangeEventHandler的方法簽名要匹配
private void game_ScoreChange (int newScore, ref bool cancel)
{
if (newScore < 100)
System.Console.WriteLine ("Good Score");
else
{
cancel = true;
System.Console.WriteLine ("No Score can be that high!");
}
}
}
//測試類
public class GameTest
{
public static void Main ()
{
Game game = new Game ();
Referee referee = new Referee (game);
game.Score = 70;//【譯注:輸出 Good Score】
game.Score = 110;// 【譯注:輸出 No Score can be that high!】
 &nb

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        国内偷窥港台综合视频在线播放| 精品91自产拍在线观看一区| 成人高清av在线| 日韩欧美国产系列| 国精产品一区一区三区mba视频| 日韩一区二区三区高清免费看看| 日韩二区三区四区| 2022国产精品视频| 成人永久免费视频| 亚洲欧美日韩国产成人精品影院| 色狠狠色狠狠综合| 爽爽淫人综合网网站| 久久综合久久鬼色| 色综合天天综合| 美脚の诱脚舐め脚责91| 久久久精品蜜桃| 欧美性欧美巨大黑白大战| 日韩电影一区二区三区| 欧美激情一区二区三区不卡| 色综合天天综合狠狠| 久久精品国产成人一区二区三区 | 欧美三区在线观看| 久久国产剧场电影| 亚洲欧洲日韩在线| 日韩女优av电影| 91免费在线看| 奇米777欧美一区二区| 欧美国产激情一区二区三区蜜月| 91高清视频在线| 国产91在线观看丝袜| 天堂成人免费av电影一区| 国产欧美日韩精品在线| 欧美精品tushy高清| jlzzjlzz亚洲女人18| 麻豆成人91精品二区三区| 亚洲综合清纯丝袜自拍| 国产亚洲午夜高清国产拍精品| 欧美在线一区二区三区| 高清国产一区二区| 毛片av中文字幕一区二区| 亚洲一区在线视频| 国产精品九色蝌蚪自拍| 日韩你懂的在线播放| 欧美日韩视频在线观看一区二区三区| 国产成人精品1024| 久色婷婷小香蕉久久| 一二三区精品福利视频| 国产精品久久久久久福利一牛影视| 日韩欧美一区在线| 欧美视频在线一区| 日本乱人伦aⅴ精品| 色综合久久88色综合天天6 | 色综合色综合色综合色综合色综合 | 欧美精三区欧美精三区| 色先锋aa成人| 91麻豆123| 99久久亚洲一区二区三区青草| 国产乱人伦偷精品视频免下载| 免费亚洲电影在线| 日本欧美加勒比视频| 免费在线看一区| 蜜臀a∨国产成人精品| 日本人妖一区二区| 狠狠色狠狠色综合系列| 国产一区中文字幕| 国产一区91精品张津瑜| 夫妻av一区二区| 成人av电影在线| 一本久久精品一区二区| 91久久精品一区二区三| 欧美日韩精品欧美日韩精品一| 欧美高清性hdvideosex| 日韩欧美中文字幕精品| 国产亚洲一区字幕| 中文字幕中文字幕中文字幕亚洲无线| 国产精品国产三级国产普通话蜜臀 | 国产视频一区在线观看| 欧美韩国一区二区| 亚洲欧洲一区二区三区| 一区二区三区四区在线| 婷婷国产v国产偷v亚洲高清| 蜜臀久久久99精品久久久久久| 黑人巨大精品欧美一区| 成人av在线一区二区| 欧美亚洲一区三区| 日韩天堂在线观看| 中文字幕精品三区| 亚洲高清一区二区三区| 激情综合五月天| 91香蕉视频mp4| 91精品国产综合久久福利软件 | 亚洲男人电影天堂| 亚洲成a人v欧美综合天堂下载| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品自拍毛片| 在线精品视频免费观看| 欧美精品一区二区三区高清aⅴ| 国产精品卡一卡二卡三| 日本三级韩国三级欧美三级| av电影在线观看完整版一区二区| 欧美狂野另类xxxxoooo| 国产精品免费视频网站| 婷婷中文字幕一区三区| 国产69精品久久99不卡| 欧美高清视频一二三区| 亚洲欧美自拍偷拍色图| 久久成人精品无人区| 91麻豆swag| 国产区在线观看成人精品 | 亚洲国产另类av| 粉嫩久久99精品久久久久久夜| 欧美精品乱码久久久久久| 欧美国产成人精品| 免费高清成人在线| 精品视频1区2区3区| 国产欧美日韩在线| 蜜臀国产一区二区三区在线播放 | 丝瓜av网站精品一区二区 | 日韩欧美在线一区二区三区| 亚洲乱码国产乱码精品精的特点 | 884aa四虎影成人精品一区| 中文字幕欧美区| 激情综合一区二区三区| 日韩丝袜情趣美女图片| 亚洲大片免费看| 色婷婷激情一区二区三区| 国产三级三级三级精品8ⅰ区| 丝袜美腿一区二区三区| 欧美日韩免费观看一区二区三区 | 免费观看成人av| 91精品国产一区二区三区| 亚洲777理论| 欧美日韩一区成人| 午夜久久福利影院| 欧美日韩精品三区| 日韩激情一二三区| 在线不卡的av| 蜜桃av噜噜一区| 久久久久久黄色| 成人免费毛片高清视频| 欧美激情一区二区三区不卡 | 蜜桃精品视频在线| 91精品国产91久久久久久一区二区| 亚洲国产日韩在线一区模特| 欧美日韩亚洲综合| 日韩成人一区二区| 欧美成人vr18sexvr| 韩国欧美国产一区| 中文字幕巨乱亚洲| 欧美色手机在线观看| 日韩成人av影视| 日韩一区二区在线看| 久久精品久久99精品久久| 久久久久久一级片| 9i在线看片成人免费| 亚洲高清中文字幕| 精品国产百合女同互慰| 成人激情小说网站| 亚洲福中文字幕伊人影院| 欧美sm美女调教| 99久久国产免费看| 日本视频免费一区| 国产精品久久久一区麻豆最新章节| 91蜜桃在线观看| 蜜臀av国产精品久久久久| 国产精品素人一区二区| 欧美精品tushy高清| 国产一区二区不卡在线| 一区二区三区四区av| 日韩欧美三级在线| 91小视频在线观看| 久久99国产精品久久99| 国产精品成人在线观看| 欧美mv日韩mv亚洲| 一本一道波多野结衣一区二区| 日韩激情一二三区| 自拍偷拍亚洲激情| 亚洲精品在线观看网站| 色狠狠桃花综合| 成人午夜精品一区二区三区| 同产精品九九九| 亚洲精品一卡二卡| 久久久久高清精品| 欧美一区二区三区成人| 色老汉一区二区三区| 国产成人aaa| 毛片av一区二区| 亚洲一二三四在线观看| 中文字幕日韩av资源站| 精品国产精品一区二区夜夜嗨 | 国产精品一区2区| 天天综合天天综合色| 亚洲日本中文字幕区| 国产欧美日韩精品一区| 日韩欧美国产电影| 欧美在线免费视屏| 99精品视频在线观看免费| 国产传媒欧美日韩成人| 久久精品国内一区二区三区| 午夜影院久久久|