程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 如何進行有效的C#學習和講授

如何進行有效的C#學習和講授

編輯:關於C#

譯者注:

回顧C#發展的歷史,版本變換的之快對於正在/准備使用C#的開發者來說,目不暇接,無力應付。當前版本還沒有深入,新版本新特性有出來了。

圖為譯者加

如何進行有效的C#學習和講授?也許Bill wagner的話對你有點啟發。原博客《Explain from the Questioner’s perspective, not your own》(http://srtsolutions.com/blogs/billwagner/archive/2009/04.aspx)

關於Bill wagner:

Billwagner是世界知名的.NET專家,微軟C#領域的MVP,並榮獲微軟RegionalDirector稱號。他是著名軟件咨詢公司SRTSolutions的創始人,有20多年軟件開發經驗,曾經領導了眾多成功的Windows平台產品的開發。他是微軟開發社區的活躍人物,長期擔任MSDNMagazine、ASP.NETPro、VisualStudioMagazine等技術雜志的專欄作者。他的blog是http://www.srtsolutions.com/public/blog/20574。

引言

我曾經參與一個有趣的討論,主體是關於“C#版本更新太頻繁,以至於教開發人員精通每一個版本的技術變的越來越困難”。

我想這個是我們的過錯。

作為領導者和有經驗的發人員,對於新手,我們經常對他們傳授從我們的經驗看:從C#1.0入門,2.0學習語言新特征,然後3.0中,學習LINQ和其他的新加語法。現在,我們正在准備學習C#4.0新特性到我們技術體系。我們就是這樣認為的,也是這樣學的。

然而我們不是他們.

對於一些人來說,這是中效率低下的學習C#語言方式。相反,我們應當根據他們的基礎傳達新的理念他們如何學習,而不是我們是如何學習的。我多麼想以擁有這樣驚人的洞察力為榮,可以我得以Bjarne Stroustrup為榮。早在1999年,他為《C++ Users Journal back》雜志寫過的一篇文章中提成:"C++社區必須改變他們教授C+ +的方式"; 過去,每個人對C++新手進行教學的時候,都假定他是經驗豐富的C程序員。然後才是如何去教。相反,Stroustrup指出“C++程序員應該學習C++中最重要的特性,而不是先去教C,然後再轉移到C++”;

Lambda表達式的例子

拿Lambda表達式作為例子解釋C#是什麼,我認為是個很好的例子。當我向一個C#新手解釋Lambda表達試時,我用這個例子:

var someNumbers = new List<int>(Enumerable.Range(-20, 200));
someNumbers.RemoveAll(n => n > 30);

bool assertion = someNumbers.TrueForAll(n => n < 40);

第一行代碼用一堆數字創建一個集合。

第二行導入到Lambda表達式。它刪除集合中所有大於30的數字。在Lambda表達式中“n => n > 30”描述是從中刪除的所有元素符合的條件。Lambda表達式是一個方法的簡單寫法: n是參數。該表達式返回一個布爾值,例子結果是“n > 30’。

在這一點上,我會經常被問道幾個問題:

參數‘n’的類型是什麼?

這個容易回答:編譯器為Lambda表達式推斷參數類型,編譯器推斷他一定為整型,因為集合中已經有一部分整型數據。

為什麼這而沒有返回值

是,我知道這算不上什麼問題,但是這確實反映了他們的困惑,這個也是他們經常問起的原因。我這樣解釋,編譯器推斷返回類型。List.RemoveAll() 把 Predicate 作為他的參數, Predicate返回bool類型。因此表達式‘n > 30’ 必須是個bool類型的表達式。為了說明這一點,我會修改代碼顯示編譯器如何檢查類型。Lambda 表達式 ‘n => n.ToString()’ 就不能編譯通過,因為n.ToString()是n的string表示的計算,不是bool表達式。然後,我開始講這個概念:Lambda 表達式是允許你通過傳遞代碼(術語:Lambda)到另外一個函數進行晚期執行的一個途徑。在編譯器內部,List.RemoveAll()用Lambda表達式參數對集合中的每個元素進行計算判斷,移出符合條件的元素。

同樣的方法,我來解釋TrueForAll();

不錯,但是關於委托,匿名委托和表達式數那?

如果您是經驗豐富的C #中開發者可能會注意到:我沒有提到lambdas和匿名委托相像,也沒有進一步反復強調匿名委托就是委托。

總之,我沒有把Lambda表達式用C#中1.0語法中去作解釋。特別強調一點:除非你有過C#的從頭學習的經驗,否則這個概念對你一點也沒有用。一些人學習C#並沒有先前C# 1.0,2.0的基礎。

看了我一上的說明,他們並沒給出編譯器如何解釋lambda表示式的砸碎的細節。相反,如何使用lambda表達式寫代碼,給出了很好的說明並且對lambda表達式能做什麼給出了闡述。

我沒有說錯什麼,但很多細節被忽略。That’s ok,隱藏細節能讓新手更好入門。如果這些C#新手想更全面深入的了解時候,我們可以來彌補這些漏洞。

在那時,他們樂意接受不同的解釋。

在此之前,我們最好地利用幫助他們的解釋來解釋概念,即使這些解釋不同於我們是如何學的經驗。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved