在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

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

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

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

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

在GameTest里,我們分別創建了一個game和一個監視game的referee,然后,然后我們改變game的Score去看看referee對此有何反應。在這個系統里,game沒有referee的任何知識,任何類都可以監聽并對game的score變化產生反應。關鍵字event隱藏了除了+=和-=之外的所有委托方法。這兩個操作符允許你添加(或移去)處理該事件的多個事件處理器。
【譯注:我們以下例說明后面這句話的意思:
public class Game
{
public event ScoreChangeEventHandler ScoreChange;
protected void OnScoreChange()
{
if (ScoreChange != null) ScoreChange(30, ref true);//在類內,可以這么使用
}
,但在這個類外,ScoreChange就只能出現在運算符+=和-=的左邊】
 你可能首先會在圖形用戶界面框架里遇到這個系統。game好比是用戶界面的某個控件,它根據用戶輸入觸發事件,而referee則類似于一個窗體,它負責處理該事件。
 【作者注:委托第一次被微軟Visual J++引入也是Anders Hejlsberg設計的,同時它也是造成Sun和微軟在技術和法律方面爭端的起因之一。James Gosling,Java的設計者,對Anders Hejlsberg曾有過一個故作謙虛聽起來也頗為幽默的評論,說他因為和Delphi藕斷絲連的感情應該叫他“方法指針先生”。在研究Sun對委托的爭執后,我覺得稱呼Gosling為“一切都是一個類先生”好像公平些J 過去的這幾年里,在編程界,“做努力模擬現實的抽象”已經被很多人代之以“現實是面向對象的,所以,我們應該用面向對象的抽象來模擬它”。
 Sun和微軟關于委托的爭論可以在這兒看到:
http://www.Javasoft.com/docs/white/delegates.html http://msdn.microsoft.com/visualj/technical/articles/delegates/truth.asp 】
6.枚舉
 枚舉使你能夠指定一組對象,例如:
聲明:
public enum Direction {North, East, West, South};
使用:
Direction wall = Direction.North;
這真是個優雅的概念,這也是C#為什么會決定保留它們的原因,但是,為什么Java卻選擇了拋棄?在Java中,你不得不這么做:
聲明:
public class Direction
{
public final static int NORTH = 1;
public final static int EAST = 2;
public final static int WEST = 3;
public final static int SOUTH = 4;
}
使用:
 int wall = Direction.NORTH;
看起來好像Java版的更富有表達力,但事實并非如此。它不是類型安全的,你可能一不小心會把任何int型的值賦給wall而編譯器不會發出任何抱怨【譯注:你顯然不可以這么寫:Direction wall = Direction.NORTH;】。坦白地說,在我的Java編程經歷里,我從未因為該處非類型安全而花費太多的時間寫一些額外的東西來捕捉錯誤。但是,能擁有枚舉是一件快事。C#帶給你的一個驚喜是—當你調試程序時,如果你在使用枚舉變量的地方設置斷點,調試器將自動譯解direction并給你一個可讀的信息,而不是一個你自己不得不譯解的數值:
聲明:
public enum Direction {North=1, East=2, West=4, South=8};
使用:
Direction direction = Direction.North | Direction.West;
if ((direction & Direction.North) != 0)
//....
如果你在if語句上設置斷點,你將得到一個你可讀的direction而不是數值5。
【譯注:這個例子改一下,會更有助于理解:
聲明:
public enum Direction {North=1, East=2, West=4, South=8, Middle = 5/*注意此處代碼*/};
使用:
Direction direction = Direction.North | Direction.West;
if ((direction & Direction.North) != 0)
//....
如果你在if語句上設置斷點,你將得到一個你可讀的direction(即Middle)而不是數值5】
【作者注:枚舉被Java拋棄的原因極有可能是因為它可以用類代替。正如我上面提到的,單單用類我們不能夠象用別的概念一樣更好地表達某個特性。Java的“如果它可以用類處理,那就不引入一個新的結構”的哲學的優點何在?看起來最大的優點是簡單—較短的學習曲線,并且無需程序員去考慮做同一件事的多種方式。實際上,Java語言在很多方面都以簡化為目標來改進C++,比如不用指針,不用頭文件,以及單根對象層次等。所有這些簡化的共性是它們實際上使得編程—唔—簡單了,可是,沒有我們剛才提到的枚舉、屬性和事件等等,反而使你的代碼更加復雜了】
7.集合和foreach語句
 C#提供一個for循環的捷徑,而且它還促進了集合類更為一致:
在Java或C++中:
1. while (! collection.isEmpty())
{
Object o = collection.get();
collection.next()
//...
2. for (int i = 0; i < array.length; i++)
//...
在 C#中:
1.foreach (object o in collection)
//...
2.foreach (int i in array)
//...
C#的for循環將工作于集合對象上(數組實現一個集合)。集合對象有一個GetEnumerator()方法,該方法返回一個Enumerator對象。Enumerator對象有一個MoveNext()方法和一個Current屬性。
8.結構
 把C#的結構視為使語言的類型系統更為優雅而不僅是一種“如果你需要的話可以利用之寫出真正有效率的代碼”的概念更好些。
 在C++中,結構和類(對象)都可分配在棧或堆上。在C#中,結構永遠創建在棧上,類(對象)則永遠創建在堆上。使用結構實際上可以生成更有效率的代碼:
public struct Vector
{
public float direction;
public int magnitude;
}
Vector[] vectors = new Vector [1000];
這將把1000個Vector分配在一塊空間上,這比我們把Vector聲明為類并使用for循環去實例化1000個獨立的Vector來得有效率得多。【譯注:因懷疑原文有誤,此處故意漏譯一句,但不應影響你對這節內容的理解】:
int[] ints = new ints[1000];//【譯注:此處代碼有誤,應為int[] ints = new int[1000];】
C#完全允許你擴展內建在語言中的基本類型集。實際上,C#所有的基本類型都以結構方式實現的。int型只不過是System.Int32結構的別名,long型不過是System.Int64結構的別名等等。這些基本類型當然可被編譯器特別處理,但是語言本身并無區別【譯注:意思是語言自身對處理所有類型提供了一致的方法】。在下一節中,我們可看到C#是如何做到這一點的。
9.類型一致
 大多數語言都有基本類型(int、long等等)。高級類型最終是由基本類型構成的。能以同樣的方式處理基本類型和高級類型通常來說是有用處的。例如,如果集合可以象包容sting那樣包容int是有用的。為此,Smalltalk通過犧牲些許效率象處理string或Form一樣來處理int和long。Java試圖避免這個效率損失,它象C和C++那樣處理基本類型,但又為每一個基本類型提供了相應的包裝類—int包裝為Integer,double包裝為Double。C++模板參數可接受任何類型,只要該類型提供了模板定義的操作的實現。
【譯注:在Java中,你可以這么寫:
int i = 1;
double d = 1.1;
Integer iObj = new Integer(1);
Double dObj = new Double(1.1);
以下寫法是錯誤的:
int I = new int(1);
Integer iObj = 1;

C#對該問題提供了一個不同的解決方案。在上一節里,我介紹了C#中的結構,指出基本類型不過是結構的一個別名而已。既然結構擁有所有對象類型擁有的方法,那代碼就可以這么寫:
int i = 5;
System.Console.WriteLine (i.ToString());
如果我們想象使用一個對象那樣使用一個結構,C#將為你裝箱該結構為對象,當你再次需要使用結構時,可以通過拆箱實現:
Stack stack = new Stack ();
stack.Push (i); // 裝箱
int j = (int) stack.Pop(); //拆箱
拆箱不僅是類型轉換的需要,它也是一個無縫處理結構和類之間關系的方式。你要清楚裝箱是做了創建包裝類的工作,盡管CLR可以為被裝箱的對象提供附加的優化。
【譯注:可以這么認為,在C#中,對于任何值(結構)類型,都存在如下的包裝類:
class T_Box //T代表任何值類型
{
T Value;
T_Box(T t){Value = t;}
}
當裝箱時,比如:
int n = 1;
object box = n;
概念上相當于:
int n = 1;
object box = new int_Box(i);
當拆箱時,比如:
object box = 1;
int n = (int)box;
概念上相當于:
object box = new int_Box(1);
int n = ((int_Box)box).Value;】
【作者注:C#的設計者在設計過程中應該考慮過模板。我懷疑未采用模板有兩個原因:第一個是混亂,模板可能很難和面向對象的特性融合在一起,它為程序員的帶來了太多的(混亂)設計可能性,而且它很難和反射一起工作;第二點是,如果.NET庫(例如集合類)沒有使用模板的話,模板將不會太有用。不過,果真.NET類使用了它們,那將有20多種使用.NET類的語言不得不也要能和模板一起工作,這在技術上是非常難以實現的。
注意到模板(泛型)已經被Java社團考慮納入Java語言規范之中是一件有意思的事。或許每個公司都會各唱各的調—Sun說“.NET患了最小公分母綜合癥”,而微軟則說“Java不支持多語言”。
(8月10日致歉)看了一個對Anders Hejlsberg的專訪后(windows.oreilly.com/news/hejlsberg_0800.html" target=_blank>http://windows.oreilly.com/news/hejlsberg_0800.html),感覺似乎模板已浮出地平線,但第一版沒有,正因我們上面提到的種種困難。看到IL規范是如此寫法使得IL碼可以展現模板(用一個非破壞的方式以讓反射可以很好的工作)而字節碼則不可以是一件很有趣的事。在此,我還給出了一個關于Java社團考慮要加入泛型的鏈接:http://jcp.org/jsr/detail/014.jsp 】
【譯注:此處是上文提到的對Anders Hejlsberg采訪的中文版鏈接:http://www.csdn.net/develop/article/11/11580.shtm。另外,如欲了解更多關于泛型編程知識,請參見此處鏈接:http://www.csdn.net/develop/article/11/11440

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

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 玖玖精品在线视频| 天天操天天爱天天爽| 日韩不卡一二三| 日本老熟妇毛茸茸| 人妻有码中文字幕| 波多野结衣综合网| 好吊妞无缓冲视频观看| 精品少妇在线视频| 免费看国产曰批40分钟| 免费毛片网站在线观看| 成人一区二区免费视频| aa在线免费观看| 国语对白做受xxxxx在线中国| 北条麻妃69av| 蜜臀视频一区二区三区| 午夜激情在线观看视频| 午夜宅男在线视频| 天天成人综合网| 免费看日b视频| 国产毛片视频网站| 欧美日韩在线中文| 中文字幕22页| 欧美一级爱爱视频| ww国产内射精品后入国产| 国产在线观看福利| 91av视频免费观看| 成人免费在线网| 日本xxxxxxx免费视频| 欧美大尺度做爰床戏| 久久久久久久久久毛片| 色哟哟免费网站| 国产精品宾馆在线精品酒店| 成人免费xxxxx在线视频| 国产精品久久久久久9999| 久久人妻无码一区二区| 鲁一鲁一鲁一鲁一澡| 色噜噜狠狠一区二区| 欧美一级爱爱视频| 亚洲综合欧美在线| 日韩精品视频在线观看视频| 欧美精品一区二区三区免费播放| 欧美成人三级在线播放| 黄色特一级视频| 91插插插插插插插插| 人妻av无码专区| 欧美女同在线观看| 女人天堂av手机在线| 欧美精品 - 色网| 欧美大片在线播放| 国产又粗又大又爽的视频| 少妇高清精品毛片在线视频| 亚洲色图欧美自拍| 黄色三级视频在线| 免费在线观看亚洲视频| 一本之道在线视频| 亚洲一区在线不卡| 中文字幕日本最新乱码视频| 久久国产精品国产精品| 波多野结衣家庭教师视频| 超碰人人爱人人| 黄色片免费网址| 一女二男3p波多野结衣| 六月激情综合网| 免费不卡av在线| 女人色极品影院| 国产精品12p| 波多野结衣网页| 亚洲涩涩在线观看| 欧美成人福利在线观看| 92看片淫黄大片一级| 800av在线免费观看| 国产免费一区二区三区四在线播放| 国产免费人做人爱午夜视频| 波多野结衣综合网| 99精品人妻少妇一区二区| 成年人午夜视频在线观看| 欧美黄色免费网址| www插插插无码免费视频网站| 亚洲AV无码成人精品一区| 亚洲xxx在线观看| 不卡中文字幕在线观看| 999久久久精品视频| 成人手机视频在线| 亚洲精品天堂成人片av在线播放| av不卡在线免费观看| 四虎永久免费网站| 97超碰人人澡| 91av俱乐部| 午夜激情影院在线观看| 亚洲AV无码成人精品一区| 黄色一级大片免费| 日本免费一级视频| 免费av不卡在线| 国产精品视频一二三四区| 男女视频网站在线观看| 日本免费观看网站| 手机看片日韩国产| 久久精品国产精品亚洲色婷婷| 国产av无码专区亚洲精品| 蜜臀av免费观看| 欧美日韩激情四射| 日韩精品一区二区三区色欲av| 五月婷婷激情久久| 妞干网视频在线观看| 免费大片在线观看| 热这里只有精品| 久草在在线视频| 日韩激情视频一区二区| 黑森林精品导航| 青青草视频在线视频| 中文字幕第36页| www.av片| 91九色国产ts另类人妖| aaaaaa亚洲| 美女av免费观看| 亚洲一二三av| 日本999视频| 国产av人人夜夜澡人人爽麻豆 | 大西瓜av在线| 亚洲第一天堂久久| 国产最新免费视频| 日韩亚洲欧美一区二区| 日本精品一区在线| 免费观看成人在线视频| 男人添女人荫蒂免费视频| 国产乱码一区二区三区四区| 黑森林福利视频导航| 欧美精品久久久久久久自慰| 黄色影视在线观看| 亚洲第一精品区| 爱豆国产剧免费观看大全剧苏畅| www.国产区| 成年人网站大全| 久久久久国产精品熟女影院| 欧美黄网站在线观看| www.成年人视频| 无颜之月在线看| www.男人天堂网| 日韩人妻一区二区三区蜜桃视频| 黄色www在线观看| 色乱码一区二区三区熟女| 一二三级黄色片| 天天操夜夜操很很操| www亚洲国产| 三级在线免费观看| 国产美女在线一区| 久久成人免费观看| 亚洲色图38p| 999在线精品视频| a级网站在线观看| 日本阿v视频在线观看| 欧美 日韩 亚洲 一区| 日韩激情免费视频| 自拍偷拍21p| 特色特色大片在线| 黄色av网址在线播放| 毛葺葺老太做受视频| 99视频在线视频| 影音先锋男人的网站| 国产成a人亚洲精v品在线观看| 日韩少妇内射免费播放| 香蕉视频网站入口| 亚洲综合激情五月| 欧美黄色免费网址| 玩弄japan白嫩少妇hd| xxx中文字幕| 三上悠亚久久精品| 亚洲第一狼人区| 国产曰肥老太婆无遮挡| 国产一级特黄a大片免费| 国产免费一区二区三区四在线播放| 国产肉体ⅹxxx137大胆| 日韩一级在线免费观看| 免费在线精品视频| 无码人妻丰满熟妇区毛片| 国产精品av免费| 欧美伦理视频在线观看| 强开小嫩苞一区二区三区网站| 欧美 日韩 国产 高清| 一级黄色高清视频| 麻豆av免费在线| 成人av在线不卡| 爱爱爱视频网站| a在线观看免费视频| 色欲色香天天天综合网www| 欧洲美女亚洲激情| 国产嫩草在线观看| 欧美日韩在线中文| 一本久道高清无码视频| 欧美 另类 交| 亚洲色图偷拍视频| 中文字幕一区二区三区四区在线视频| 成年女人18级毛片毛片免费| 日韩欧美理论片| 国产精品v日韩精品v在线观看| 国产精品一区二区免费在线观看| 日本一本在线视频| 日本黄色的视频| av噜噜在线观看| 99九九精品视频|