Home
R
Cancel

[C# 筆記] 委派(Delegate) & 事件(Event)

為什麼C#中的event 的定義要用到委派delegate? 在官方文件的介紹中有這麼一段描述:事件是一種特殊的多播委派。 那也就是說事件Event其實是委派Delegate的一種封裝,事件的底層是委派。那好,為了證明這一點我們只用委派去實現整個事件與觸發。 什麼是委派? 比如,你外賣到了你不想動,叫你室友幫你去拿,然後你室友就幫你拿了。這就是委派(委託),委託別人幫你做一件事情。 ...

[C# 筆記] 委派(Delegate)

什麼是委派(Delegate)? 「委派(Delegate)」可以看成一種方法指標(Method Pointer)。 委派就是:這有一件事情,我不親自去做,而是交給別人來做。 把函數(方法)當作一個變量、參數。 委派:把小方法當作一個參數 傳給大方法裡面,小方法還需要使用 大方法裡面的變量。 實現這種功能的辦法就叫委派。 通過+增加「子委派」,通...

[C# 筆記] 密封類別(Sealed Class)

什麼是密封類別(Sealed Class)? sealed:密封類別,不允許被繼承,但能夠繼承其他的類別。 「密封類別(Sealed Class)」其主要作用在於「限制某一類別不能夠被繼承(衍生)」,一旦類別宣告成「密封類別」,就表示該密封類別不可能有子類別(衍生類別)。 Sealed 密封類別,表示它不能被別人繼承,但它能去繼承別人。 //Sealed 密封類別- 能被別人繼承,但...

[C# 筆記] 抽象類別(Abstract Class)和介面(Interface)有何不同?

抽象類別(Abstract Class)和介面(Interface)有何不同? 相同點: 都可以被繼承 都不能被實體化 (不能new) 都可以包含方法聲明 衍生類別必須實作未實作的方法 區別: 抽象基底類別可以定義欄位、屬性、方法實作。介面只能定義屬性、索引器、事件、和方法聲明,不能包含欄位。 抽象類別是一個不完整的類別,需要進一步細化,而介面是一個行為...

[C# 筆記] 抽象類別(Abstract Class)

「抽象類別(Abstract Class)」只有抽象概念,代表的是,我們不需要在基類(父類)中實現這個方法。 而具體的實現,只能在派生類(子類)中處理。 抽象類別(Abstract Class)就是「只能用來提供給其他類別繼承的基底類別」,它提供一種類似樣版的功能。 抽象類別中,可以實作完整的方法和屬性,也可以像 interface 介面一樣單純宣告方法和屬性的空殼,留待給繼...

[C# 筆記] 實作介面 vs 明確實作介面

實現介面的函數有兩種方式: 實作介面 明確實作所有成員:解決方法重名的問題 MSDN say: 如果沒有強力的理由,要避免明確實作介面成員。 如果成員只要透過介面來呼叫,請考慮明確實作介面成員。 實作介面 如果類別實作兩個具有相同名稱成員的介面,則在類別上實作該成員 會造成這兩個介面都使用該成員進行實作。 所有對 Paint() 的呼叫都會叫用相同的方法...

[C# 筆記] 介面與實作

什麼是介面? 所謂的「介面(Interface)」如同「契約」一般,於介面中所定義的屬性、方法、和事件等,就是契約的大綱。 若要得知這份契約的詳盡內容,則需要透過類別來繼承介面才能完成實作(Implementation)。 而介面本身是不提供實作的。 也就是說,你可以在介面宣告一個個方法名稱MyMethod(),但是此方法的執行內容不能於介面中進行程式碼編寫。 public ...

[C# 筆記] static靜態成員 & 實體成員

心得:只有在完全完全確定一個方法不會有結構調整,與系統中其他部分幾乎沒有關聯時,才可以考慮把它寫成靜態方法。 否則,不要用靜態方法! 靜態方法的三大問題: 問題 1:測試困難 問題 2:不靈活 問題 3:靜態傳染 不必要的記憶體浪費 因為 靜態並非 沒有實體,而是只有一個實體,在程式執行之初就建立,並佔用記憶體位置,而且一直存在 ...

[C# 筆記] Using 作用

using作用: using 指令:引入命名空間 using static 指令:無需指定類型名稱即可存取其靜態成員 using 建立别名 using 語句:將實體與程式碼綁定,結束後自動Dispose,釋放實體資源。(與資料庫互動時常用到) 1. using 指令:引入命名空間 using 用於引入命名空間,以便在程式碼中使用其中定義的類型而不需要使用完全限定的類型...

[C# 筆記] 命名空間(Namespace)

什麼是命名空間(Namespace)? 命名空間(Namenspac)主要功能「用來宣告範圍」。(1).能有效管控專案中的類別和方法的範圍。只要透過 using 關鍵字就可引入命名空間(在一個專案中,引用另一個專案,必須加入參考),就可以使用該命名空間中的定義。(2).能夠加以擴充原有命名空間的功能。例如:宣告using System.IO {}來擴充原有系統IO功能。 用來指明程...