這一、兩個月陸陸續續也面試了幾家公司,卻也因此發現很多自己過往並不了解的東西,順便整理起來當作學習,也可以幫助到其他人
1. Boxing, Unboxing
這個其實概念非常簡單,就是把物件轉變成object,再casting回來,以前也用過,只是沒想到名詞是這個
範例請見
https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/types/boxing-and-unboxing
2. public, private, protected, internal
public, private, protected來說大家應該不陌生,反倒是internal沒有用過,當下還真不知道這是什麼
public: 任何人都可以存取使用
private: 只有自身類別才能存取使用
protected: 只有自身類別與子類別才能存取使用
internal: 只有同一個namespace的才能存取
另一個名詞protected internal也因此而誕生
protected internal: 本來以為是protected && internal的概念,沒想到是protected || internal的概念
參考資料有畫圖,會更容易理解
3. const 與 readonly的差別
用了C#這麼久,一直以來都是用 const,較少會去用到readonly
但沒想到差異性還蠻大的,讓我蠻驚訝的,只是以前的寫法都在同一個project用const或是readonly都不會出問題
const: 性能較好, 缺點只能用於 int, string
readonly: 較有彈性, 能用於所有type
最最最大的差異在於引用的方式,但這通常發生於A project去reference B project時的const, readonly變數會發生的
const的引用是以值,而readonly的引用是以變數
詳細例子可以看這篇網誌,應當會被結果給嚇了一跳
https://dotblogs.com.tw/yc421206/archive/2011/06/06/27232.aspx
4. 資料庫效能 Cluster index 與 Non-cluster index
以前僅限接觸過一次,記憶馬上飛走
詳細差異可以參閱
http://www.qa-knowhow.com/?p=377
5. Regular super class 與 abstract class的差異
這是沿生至abstract class 與 interface的差異的問題
abstract class與 interface 在design pattern都是重量級的角色
一般來說interface只是行為面的介面,不能包含變數與實作內容
而abstract則可以針對未知的部份去定義即可,若有共用的function則可定義在abstract class裡進去重複使用
而問題就來了: regular super class 可以做abstract class 所有的事,那什麼時候該用哪一個
在多型方面,regular super class的確也可以做到abstract class的事
以收納共用變數與function來講,的確兩者都也都可以做到
在使用上最大的差異應該就是在於實體化,abstract class無法被實體化
總體來說,會宣告成abstract function的通常也意味著目前你還不清楚實作會是長成什麼樣
或是在子類別上的實作是完全不一樣的事情,才會定義為abstract class
而使用上,你必須定義一個regular class繼承這個abstract class,才能在程式上的實作有辦法使用
更多的參考資料與差異
https://stackoverflow.com/a/13079402
https://kejyuntw.gitbooks.io/php-learning-notes/class/class-abstract-interface-compare.html
參考資料
boxing unboxing
https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/types/boxing-and-unboxing
pbulic, private, protected, internal, protected internal
https://dotnetrecorder.wordpress.com/2013/06/27/c-%E5%AD%98%E5%8F%96%E4%BF%AE%E9%A3%BE%E8%A9%9E%E3%80%90public-protected-private-internal-protected-internal%E3%80%91%E7%9A%84%E5%8D%80%E5%88%A5/
const, readonly
https://dotblogs.com.tw/yc421206/archive/2011/06/06/27232.aspx
cluster index, non-cluster index
http://www.qa-knowhow.com/?p=377
regular super class, abstract class
https://stackoverflow.com/a/13079402
https://kejyuntw.gitbooks.io/php-learning-notes/class/class-abstract-interface-compare.html