總結.Net基礎知識——獻給即將入坑的同行們(第一期)

什麼是面向對象javascript

面向對象OO = 面向對象的分析OOA + 面向對象的設計OOD + 面向對象的編程OOP;java

通俗的解釋就是萬物皆對象,把全部的事物都看做一個個能夠獨立的對象(單元),它們能夠本身完成本身的功能,而不是像C那樣分紅一個個函數;c++

如今純正的OO語言主要是java和C#,C++也支持OO,C是面向過程的。程序員

闡述面向接口、面向對象、面向方面編程的區別web

面向對象很差解釋,能夠理解爲以一切元素都是對象,在設計時以對象爲單位,考慮它的屬性及方法。設計中採用了封裝、繼承、抽象的手法正則表達式

面向接口自己就是面向對象的,無所謂區別,只不過面向接口的好處是耦合性低數據庫

面向方面Aspect-Oriented Programming (AOP)就是大名鼎鼎的AOP。其實有點象struts裏的攔截。編程

舉例:假設有在一個應用系統中,有一個共享的數據必須被併發同時訪問,首先,將這個數據封裝在數據對象中,稱爲Data Class,同時,將有多個訪問類,專門用於在同一時刻訪問這同一個數據對象。c#

爲了完成上述併發訪問同一資源的功能,須要引入鎖Lock的概念,也就是說,某個時刻,當有一個訪問類訪問這個數據對象時,這個數據對象必須上鎖Locked,用完後就當即解鎖unLocked,再供其它訪問類訪問。數組

面向對象的思想主要包括什麼?

繼承:子類擁有父類的全部數據和操做。

封裝:用抽象的數據類型將數據和基於數據的操做封裝在一塊兒,數據被保護在抽象數據類型內。

多態:一個程序中同名的不一樣方法共存的狀況。有兩種形式的多態–重載與重寫。

抽象類是否能夠繼承實體類?

抽象類能夠繼承實體類,可是有個條件,條件是,實體類必需要有明確的構造函數。

當類T只聲明瞭私有實例構造函數時,則在T的程序文本外部,是否能夠從T派生出新的類,是否能夠直接建立T的任何實例。

不能夠,不能夠

C#中有沒有靜態構造函數,若是有是作什麼用的?

有. 靜態構造函數用於初始化類。在建立第一個實例或引用任何靜態成員以前,將自動調用靜態構造函數來初始化類。靜態構造函數既沒有訪問修飾符,也沒有參數。在建立第一個實例或引用任何靜態成員以前,將自動調用靜態構造函數來初始化類。沒法直接調用靜態構造函數。在程序中,用戶沒法控制什麼時候執行靜態構造函數。靜態構造函數的典型用途是:當類使用日誌文件時,將使用這種構造函數向日志文件中寫入項。

什麼是.net?

.net是一種平臺和框架, .net 不是單純的語言也不是單純的工具,它是從底層平臺開始構建起來的一個總體框架

請以圖示方式解釋.net framework?

 

 

程序集與命名空間有什麼不一樣?

命名空間是用於避免命名衝突,專用於組織代碼,當代碼要在其餘某個應用程序中重用時,能夠下降複雜性。

程序集是重用代碼的一種方式驗證控件

不一樣: 能夠將相同命名空間中的類部署到不一樣的程序集中,也能夠命名空間中的類部署到一個程序集中​

 

 

什麼是WEB控件?使用WEB控件有那些優點?

WEB控件是能拖放在WEB頁面上的控件

WEB控件分爲:內部控件, 列表控件, 複雜控件,

•WEB控件優點:

l Web 控件是對象,與對象同樣,Web 控件擁有方法和屬性,而且響應事件

l 一旦將 Web 控件包括在 Web 頁中,就能夠設置其屬性並調用其方法

l 能夠爲 Web 控件編寫服務器端代碼以響應在客戶端上發生的事件

ASP.NET中共有幾種類型的控件?各有什麼區別?

WEB控件分爲:內部控件, 列表控件, 複雜控件, 驗證控件

內部控件:內部控件的使用方法與 HTML 控件相同,它們映射到 HTML 元素並經過使用 runat = "server" 屬性在服務器上執行

列表控件:用於在 Web 頁中建立數據列表

複雜控件:當但願控件擁有複雜的功能或使用 HTML 元素沒法建立的功能豐富的用戶界面時,可使用複雜控件

驗證控件:輸入控件的數據須要進行準確性和取值範圍方面的檢查

WEB控件能夠激發服務端事件,請談談服務端事件是怎麼發生並解釋其原理?自動傳回是什麼?爲何要使用自動傳回。

因爲ASP。NET是Web頁面和服務端分離的,所以要產生了服務端事件.

使用_doPostBack函數可以自動地把客戶端的javascript事件轉變爲一個服務器端的事件,Asp.net框架自動爲咱們處理有關的細節簡化工做。

使用自動傳回的特性:在檢測到一個特定用戶動做時,自動傳回可以將這個頁面傳回服務器以處理事件.

在web控件發生事件時,客戶端採用提交的形式將數據交回服務端,服務端先調用Page_Load事件,而後根據傳回的狀態信息自動調用服務端事件自動傳回是當咱們在點擊客戶端控件時,採用提交表單的形式將數據直接傳回到務端。只有經過自動傳回才能實現服務端事件的機制,若是沒有自動回傳機制就只能調用客戶端事件,而不能調用服務端事件

請解釋ASP.NET中以什麼方式進行數據驗證。

Aps.net 中有非空驗證,比較驗證,取值範圍驗證,正則表達式驗證及客戶自定義驗證五大控件,另還有一個集中驗證信息處理控件

什麼是ASP.Net中的用戶控件

用戶控件是可以在其中放置標記和 Web 服務器控件的容器。而後,能夠將用戶控件做爲一個單元對待,爲其定義屬性和方法。

用戶控件以。ascx爲擴展名,能夠拖到不一樣的頁面中調用,以節省代碼。好比登錄可能在多個頁面上有,就能夠作成用戶控件,可是有一個問題就是用戶控件拖到不一樣級別的目錄下后里面的圖片等的相對路徑會變得不許確,須要自已寫方法調整。

問這樣的問題,通常是迷惑你。由於新手仍是分不清楚用戶控件和服務器控件(也稱自定義控件),用戶控件通常用在內容多爲靜態,或者少量會改變的狀況下,用的比較大,相似ASP中的include。。可是功能要強大的多。

WEB控件及HTML服務端控件可否調用客戶端方法?若是能,請解釋如何調用?

能夠調用

例如:<asp:TextBox id="TextBox1" onclick="clientfunction();" runat="server"></asp:TextBox>

<INPUT id="Button2" value="Button" name="Button2"runat="server" onclick="clientfunction();">

C#, Java 和 c++的特色,有什麼相同的地方,不一樣的地方, C#分別從c++和java中吸收了他們那些優勢?

C#看起來與Java有着驚人的類似;它包括了諸如單一繼承,界面,與Java幾乎一樣的語法,和編譯成中間代碼再運行的過程.可是C#與Java有着明顯的不一樣,它借鑑了Delphi的一個特色,與COM(組件對象模型)是直接集成。

微軟c#語言定義主要是從C和C++繼承而來的,並且語言中的許多元素也反映了這一點.C#在設計者從C++繼承的可選選項方面比Java要普遍一些(好比說 structs),它還增長了本身新的特色(比方說源代碼版本定義).

C#從Java繼承而來的特色

類:在C#中類的聲明與Java很類似。特色看起來與Java相比沒有變化.

布爾運算:條件表達式的結果是布爾數據類型,布爾數據類型是這種語言中獨立的一種數據類型.從布爾類型到其餘類型沒有直接的轉換過程.布爾常量true和false是C#中的關鍵字.

錯誤處理:如Java中那樣,經過拋出和捕捉異常對象來管理錯誤處理過程.

內存管理:由底層.NET框架進行自動內存垃圾回收.

C#從C和C++繼承的特色

編譯:程序直接編譯成標準的二進制可執行形式.

結構體:一個C#的結構體與C++的結構體是類似的,由於它可以包含數據聲明和方法.可是,不象C++,C#結構體與類是不一樣的並且不支持繼承.可是,與Java相同的是,一個結構體能夠實現界面.

預編譯:C#中存在預編譯指令支持條件編譯,警告,錯誤報告和編譯行控制. #error

C#獨有的特色

中間代碼:微軟在用戶選擇什麼時候MSIL應該編譯成機器碼的時候是留了很大的餘地.微軟公司很當心的聲稱MSIL不是解釋性的,而是被編譯成了機器碼.它也明白許多--若是不是大多數的話--程序員認爲Java程序要不可避免的比C編寫的任何東西都要慢.而這種實現方式決定了基於MSIL的程序(指的是用 C#,Visual Basic,"Managed C++"--C++的一個符合CLS的版本--等語言編寫的程序)將在性能上超過"解釋性的"Java代碼.固然,這一點還須要獲得事實證實,由於C#和其餘生成MSIL的編譯器尚未發佈.可是Java JIT編譯器的廣泛存在使得Java和C#在性能上相對相同.象"C#是編譯語言而Java是解釋性的,"之類的聲明只是商業技巧.Java的中間代碼和 MSIL都是中間的彙編形式的語言,它們在運行時或其它的時候被編譯成機器代碼.

命名空間中的聲明:當你建立一個程序的時候,你在一個命名空間裏建立了一個或多個類.同在這個命名空間裏(在類的外面)你還有可能聲明界面,枚舉類型和結構體.必須使用using關鍵字來引用其餘命名空間的內容.

基本的數據類型:C#擁有比C,C++或者Java更普遍的數據類型.這些類型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java同樣,全部這些類型都有一個固定的大小.又象C和C++同樣,每一個數據類型都有有符號和無符號兩種類型.與 Java相同的是,一個字符變量包含的是一個16位的Unicode字符.C#新的數據類型是decimal數據類型,對於貨幣數據,它能存放28位10 進制數字.

兩個基本類:一個名叫object的類是全部其餘類的基類.而一個名叫string的類也象object同樣是這個語言的一部分.做爲語言的一部分存在乎味着編譯器有可能使用它--不管什麼時候你在程序中寫入一句帶引號的字符串,編譯器會建立一個string對象來保存它.

參數傳遞:方法能夠被聲明接受可變數目的參數.缺省的參數傳遞方法是對基本數據類型進行值傳遞.ref關鍵字能夠用來強迫一個變量經過引用傳遞,這使得一個變量能夠接受一個返回值.out關鍵字也能聲明引用傳遞過程,與ref不一樣的地方是,它指明這個參數並不須要初始值.

與COM 的集成:C#對Windows程序最大的賣點可能就是它與COM的無縫集成了,COM就是微軟的Win32組件技術.實際上,最終有可能在任何.NET語言裏編寫COM客戶和服務器端.C#編寫的類能夠子類化一個以存在的COM組件;生成的類也能被做爲一個COM組件使用,而後又能使用,比方說, JScript語言子類化它從而獲得第三個COM組件.這種現象的結果是致使了一個運行環境的產生,在這個環境裏的組件是網絡服務,可用用任何.NET語言子類化.

索引下標:一個索引與屬性除了不使用屬性名來引用類成員而是用一個方括號中的數字來匿名引用(就象用數組下標同樣)之外是類似的.

代理和反饋:一個代理對象包括了訪問一個特定對象的特定方法所需的信息.只要把它當成一個聰明的方法指針就好了.代理對象能夠被移動到另外一個地方,而後能夠經過訪問它來對已存在的方法進行類型安全的調用.一個反饋方法是代理的特例.event關鍵字用在將在事件發生的時候被當成代理調用的方法聲明中.

在C#中,string str = null與string str = 「」的區別。

string str = null是不給他分配內存空間,而string str = ""給它分配長度爲空字符串的內存空

怎樣理解靜態變量?靜態成員和非靜態成員的區別?

靜態變量屬於類,而不屬於對象;並對全部對象所享;靜態成員在加類的時候就被加載。

靜態成員和非靜態成員的區別?

靜態變量使用 static 修飾符進行聲明,靜態成員在加類的時候就被加載(在類被實例化時建立,哪一個對),經過類進行訪問

不帶有static 修飾符聲明的變量稱作非靜態變量,在對象被實例化時建立,經過對象進行訪問

一個類的全部實例的同一靜態變量都是同一個值,同一個類的不一樣實例的同一非靜態變量能夠是不一樣的值

靜態函數的實現裏不能使用非靜態成員,如非靜態變量、非靜態函數等

DataReader和DataSet的異同

DataReader和DataSet最大的區別在於,DataReader使用時始終佔用SqlConnection,在線操做數據庫,任何對SqlConnection的操做都會引起DataReader的異常,由於DataReader每次只在內存中加載一條數據,因此佔用的內存是很小的,由於DataReader的特殊性和高性能。因此DataReader是隻進的,你讀了第一條後就不能再去讀取第一條了。

DataSet則是將數據一次性加載在內存中。拋棄數據庫鏈接,讀取完畢即放棄數據庫鏈接,由於DataSet將數據所有加載在內存中。因此比較消耗內存,可是確比DataReader要靈活,能夠動態的添加行,列,數據。對數據庫進行回傳更新操做。

簡述靜態類和靜態成員

靜態類中的成員都必須是靜態的。靜態類無構造方法,而且是密封類沒法被繼承。

靜態成員訪問時只能經過類名來訪問,不能經過對象訪問(和JAVA有區別),this也沒法訪問靜態成員。

描述接口的做用

充當類的功能界面,接口裏的成員屬於抽象描述,必須經過類的實現才能使用。如:某個項目有多個模塊組成,每一個模塊由一個開發者完成,開發者只需編寫完模塊功能實現後,留下的接口供其餘人使用。其餘人在程序中,使用接口時,只需知道接口的功能,不瞭解如何實現。

當功能模塊沒法知足須要或功能模塊的需求變動時,程序員只需將該功能模塊的實現代碼進行修改和擴充,而其餘調用接口的程序無須改動。接口的這種應用模式成爲brige模式(即意圖和實現分離)

接口反映了面向對象的多態特徵,即經過相同方法獲得不一樣實現。接口也反映了面向對象的封裝特徵,使用者能夠不清楚接口成員的實現細節。

注意:由於接口成員默認的訪問權限是public,因此在實現接口時,類的成員必須爲public,且方法名和參數必須一致。

描述抽象類

用abstract修飾的類。抽象類能夠包含實現的成員。未實現的成員隱含的是virtual屬性,子類實現時必須用override關鍵字。

請解釋接口的顯式實現有什麼意義?

接口是其餘類型爲確保它們支持某些操做而實現的引用類型。接口從不直接建立並且沒有實際的表示形式,其餘類型必須轉換爲接口類型。一個接口定義一個協定。實現接口的類或結構必須遵照其協定。接口能夠包含方法、屬性、索引器和事件做爲成員。

在項目中爲何使用接口?接口的好處是什麼?什麼是面向接口開發?

接口只是一種約束。使用 interface 去定義某些特定的功能,爲的是不要將代碼寫死在自定義類裏,以便在系統開發、過後維護、功能擴充 上更有擴展性。

接口用於描述一組類的公共方法/公共屬性. 它不實現任何的方法或屬性,只是告訴繼承它的類至少要實現哪些功能,繼承它的類能夠增長本身的方法. 使用接口可使繼承它的類: 命名統一/規範,易於維護。提供永遠的接口。 當類增長時,現有接口方法可以知足繼承類中的大多數方法,不必從新給新類設計一組方法,也節省了代碼,提升了開發效率。

面向接口開發的好處有結構清晰,類間通訊簡單易懂,擴展性好,提升複用性等等。

面向接口開發就是指面向抽象協議編程,實現者在實現時要嚴格按協議來辦。

接口和類有什麼異同。

不一樣點:

一、不能直接實例化接口。

二、接口只包含方法或屬性的聲明,不包含方法的實現。

三、接口能夠多繼承,類只能單繼承。

四、類有分部類的概念,定義可在不一樣的源文件之間進行拆分。

五、表達的含義不一樣,接口主要定義一種規範,統一調用方法,也就是規範類,約束類,類是方法功能的實現和集合

相同點:

一、接口、類和結構均可以從多個接口繼承。

二、接口相似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的全部成員。

三、接口和類均可以包含事件、索引器、方法和屬性。

您在什麼狀況下會用到虛方法或抽象類,接口?

若是某個方法可能性在派生類中會被重寫。這時就將該方法寫爲虛方法。

抽象類:是一個類型,與派生類之間的關係是一個「ISA」的關係。用來作基類,抽象類不能建立對象,類中包括抽象方法和實例方法。

接口:是設計一個規範,描述了Can do ;與實現類之間是中」LINE A 的關係,C#中接口不能包含字段訪問修飾符。

對比抽象基類和接口的使用

抽象類能有具體實現,而接口只定義行爲規範,不能有具體實現。一個類只能繼承一個父類,但能實現多個接口。

C#中的接口和抽象類有什麼異同。你選擇使用接口和抽象類的依據是什麼?

一、繼承:接口支持多繼承;抽象類不能實現多繼承。

二、表達的概念:接口用於規範,抽象類用於共性。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來講,對於抽象類來講,屬於"是"的關係;而接口是定義行爲規範,所以對於實現接口的子類來講,相對於接口來講,是"行爲須要按照接口來完成"。

三、方法實現:對抽象類中的方法,便可以給出實現部分,也能夠不給出;而接口的方法(抽象規則)都不能給出實現部分,接口中方法不能加修飾符。

四、子類重寫:繼承類對於二者所涉及方法的實現是不一樣的。繼承類對於抽象類所定義的抽象方法,能夠不用重寫,也就是說,能夠延用抽象類的方法;而對於接口類所定義的方法或者屬性來講,在繼承類中必須重寫,給出相應的方法和屬性實現。

五、新增方法的影響:在抽象類中,新增一個方法的話,繼承類中能夠不用做任何處理;而對於接口來講,則須要修改繼承類,提供新定義的方法。

六、接口能夠做用於值類型(枚舉能夠實現接口)和引用類型;抽象類只能做用於引用類型。

七、接口不能包含字段和已實現的方法,接口只包含方法、屬性、索引器、事件的簽名;抽象類能夠定義字段、屬性、包含有實現的方法。

八、接口能夠用於支持回調(CallBack);抽象類不能實現回調,由於繼承不支持。

以下給出二者的簡單對比表格。

 

 

如何選擇:

一、看是否須要多繼承,若是須要就只能使用接口

二、看你在累裏定義的方法是否須要有實現的代碼,若是要,就使用抽象類

三、使不一樣的類型有共同的特性的時候使用接口,由於它支持多繼承,只想從一個類型繼承出不一樣的行爲的子類的時候使用抽象類,能夠在基類裏有代碼實現。

從實現接口和現實抽象類的方法來看,接口是死的,抽象類是活的,固然實現接口的類是活的。

結構和類的區別

簡單的說成class能夠被實例化,屬於引用類型struct屬於值類型,

1)類型,空間分配。結構是值類型,是分配在內存的棧上的.類時引用類型,,是分配在內存的堆上的。結構實例化能夠不用new,即便用new操做也不會在堆裏分配內存。做參數是按值傳遞,類時引用傳遞,變量用完自動解除內存分配,類須要垃圾回收期

2)基類。結構繼承自System.ValueType類,所以不具多態性。可是注意,System.ValueType是個引用類型。類繼承自System.Object類;

3)職能。struct經常使用於存儲數據;而class表現爲行爲

4) 結構沒有類的特性,不支持繼承。但能夠實現接口。

5)結構沒法聲明無參的構造函數,但能夠聲明有參的構造函數

6)結構的實例成員不能直接賦初值,必須經過構造函數來賦值,但靜態成員能夠直接賦初值

7)無抽象結構,但有抽象類(abstract)

8)class 能夠聲明protected成員、virtual成員、sealed成員和override成員;而struct不能夠,可是值得注意的是,struct 能夠重載System.Object的3個虛方法,Equals()、ToString()和GetHashTable()。

接口與繼承的區別?何時使用接口,何時使用繼承?

(1) 接口定義一個類型須要實現的方法,屬性,索引和事件,包括可能的參數類型和返回值類型,而把具體的實現交由相應的類或結構來作,從而爲組件提供多態能力。

(2) 繼承經常使用於在一個現有父類的基礎上的功能擴展,每每是咱們將幾個類中相同的成員提取出來放在父類中實現,而後在各自的子類中加以繼承。

(3) 接口能夠實現多接口繼承,而繼承只能實現單繼承。

(4) 實現繼承可繼承父類型的實現,因爲接口中沒有定義方法的實現,所以必須實現繼承後該接口的全部方法。

(5) 爲父類型添加方法可能不影響使用繼承自該類型實現的用戶,而爲接口添加方法致使用戶必須爲新方法添加實現。

(6) 當派生類和基類是is-a的關係是使用"繼承",典型案例"蘋果 is-a 水果",存在can-do的關係時使用"接口"

重載(Overload )和覆寫(Override)的區別

簡單的說,一個是同一個函數的幾種形式,一個是重寫父類函數,

重載:當類包含兩個名稱相同但簽名不一樣(方法名相同,參數列表不相同)的方法時發生方法重載。用方法重載來提供在語義上完成相同而功能不一樣的方法。

覆寫:在類的繼承中使用,經過覆寫子類方法能夠改變父類虛方法的實現。

區別:

一、方法的覆蓋是子類和父類之間的關係,是垂直關係;方法的重載是同一個類中方法之間的關係,是水平關係。

二、覆蓋只能由一個方法,或只能由一對方法產生關係;方法的重載是多個方法之間的關係。

三、覆蓋要求參數列表相同;重載要求參數列表不一樣。

四、覆蓋關係中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)來決定;重載關係,是根據調用時的實參表與形參表來選擇方法體的。

<%# %> 和 <% %> 有什麼區別?

<%# %>表示綁定的數據源

<% %>是服務器端代碼塊

值類型和引用類型的區別?寫出C#的樣例代碼。

值類型包括簡單類型、結構體類型和枚舉類型,引用類型包括自定義類、數組、接口、委託等

一、賦值方式:將一個值類型變量賦給另外一個值類型變量時,將複製包含的值。這與引用類型變量的賦值不一樣,引用類型變量的賦值只複製對象的引用,而不復制對象自己。

二、派生:值類型不可能派生出新的類型,全部的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也能夠實現接口。

三、null:與引用類型不一樣,值類型不可能包含 null 值。然而,可空類型功能容許將 null 賦給值類型。

四、每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

值類型主要由兩類組成:結構、枚舉

結構分爲如下幾類:Numeric(數值)類型、整型、浮點型、decimal、bool、用戶定義的結構。

引用類型的變量又稱爲對象,可存儲對實際數據的引用。聲明引用類型的關鍵字:class、interface、delegate、內置引用類型: object、string

五、值類型存貯在棧中,而引用類型存貯在動態的堆中,棧是先進先出的有系統管理的空間,而堆是由應用程序控制的可隨時申請和釋放該空間,在Donnet中通常狀況下有垃圾收集器處理,他們的不一樣致使在編程上的不一樣。

例:

"a=null"的意思是:a的引用置爲空但此時StringBuilder的堆空間並無被釋放,所以在此以後,輸出b時,仍然能夠輸出mxh

 

 

輸出結果:

mxh

mxh

請按任意鍵繼續. . .

C#中的委託是什麼?如何理解委託?

簡單的說:委託是一種方法容器,裏面能夠裝載若干個具備相同簽名的方法引用地址,那麼調用委託,就至關於同時調用了該容器內的全部方法。

委託能夠看作一種新的對象類型,具備面向對象的特色,定義時可簽名接收參數,委託實例化時,能夠把方法名做爲一個參數傳遞給委託對象,委託能夠理解爲指向函數的引用。生成的委託對象能夠代理所傳遞的方法,能夠接收方法的參數。也就是定義了委託,能夠在不用調用原方法的狀況下,調用那個方法

例:

 

 

​委託相似於 C或 C++中的函數指針。但不一樣的是委託是面向對象、類型安全的。

委託容許將方法做爲參數進行傳遞。

委託可用於定義回調方法。

委託能夠連接在一塊兒;建立多個對象,使用「+=」累加到同一個委託對象上的引用上,例如,能夠對一個事件調用多個方法。​

 

 

方法不須要與委託簽名精確匹配。有關更多信息,請參見協變和逆變。

C# 2。0 版引入了匿名方法的概念,此類方法容許將代碼塊做爲參數傳遞,以代替單獨定義的方法。如:

 

 

結果:

事件信息:Text屬性被更改了

事件發佈者:Name類的對象

你輸入的名字是:張三

請按任意鍵繼續. . .

使用匿名方法,直接將方法體的代碼和委託對象關聯而不須要單獨定義此方法​

 

 

也能夠用Lambda表達式把delegate隱藏

相關文章
相關標籤/搜索