c#裝B指南

老皆知發表於2015-04-14

要想讓自己的程式碼,看起來更優雅,更有逼格,更高大上,就一定要寫出晦澀難懂,而又簡潔的程式碼來。

對於類自身的全域性變數,一定要加this,對於基類的,一定要加base。反射不要多,但一定要有,而且偶爾就來上那麼一兩個。

介面,抽象類,抽象方法一定要懂得利用。可以的話,配上 :base(param),  where T : interface 之類的方式。

 

對於event,delegate 要常用。而且不要直接delegate(),要用delegate.invoke();

如果對於自己的功底有把握的話,delegate.beginInvoke()也是很顯逼格的一種方式。

async,await之類的能免則免,儘可能的封裝delegate,去beginInvoke。

 

命名也一定要盡顯逼格,對於變數名,怎樣短怎樣來。對於方法名、事件名,怎樣長怎樣來。

 

如果自己封裝cache,要用key/value資料格式, 不要用Dictionary,Hashtable,一定要用ConcurrentDictionary/IEnumable<KeyValuePair>,除了對外公開 object GetValue(string Key)這樣的方法以外,必須還得配上索引器   public object this[string Key]。

對於lock,monitor,autoResetEvent,跟反射一樣,不要多,但是一定要有,且必須醒目。

對於任何功能,只要有把握,就先弄個Init,啟動兩個以上的執行緒,然後加各種ConcurrentStack,ConcurrentQueue之類的程式碼。若功能實在是太簡單,也可以加上Task.Factory.StartNew(()=>{});

 

然後要學會使用各種IQueryable,lambda,Func<>, linq,linq樹,入眼皆是一片的startWith, continueWith,AsParallel,Expression<>,()=>{}等,  而且一定要隨處可見from ... into ... select等。

各種匿名函式,匿名委託,匿名類,各種約束,也要如同家常便飯,信手拈來。

 

然後就是各種語法糖,也要靈活運用,對於需要返回兩個以上值的,不要用ref, out來返回引數,要用Tuple,對於返回[]的,要常用yield。

對於任何類,沒要求的,先繼承了IDispose再往下寫。using是絕逼不能少的。

 

對於Switch..case,工廠,策略,一律統統戒掉,要靈活使用IOC,而且絕逼不能使用任何第三方的,如Autofac,Unity,Castle之流。一定要自己封裝,耍上幾個Attribute,CreateInstance,區域性的也可採用dynmaic。

 

對於不再使用的程式碼,或是已經重構掉的程式碼,也不要註釋,或者刪掉,要加上[Obsolete],來展示這是自己的優化成果。

 

嗯,排版上也要注意,對於引數比較多的,一定要每個引數佔一行,對於傳實體的,一定不要在函式外定義,而是在引數上面new class{ xxx };且每個大括號,必須獨佔一行。

對於方法裡面程式碼比較長的, 也要常用{}來進行分段,且每個大括號,必須獨佔一行。

 

對於低階幼稚的,一定要避免。比如 return num == 1 ? true : false; 之類的程式碼,就不要出現了,直接 return num == 1;  

對於Convert.ToInt32(Request["key"]);double.TryParse(Request["key"], out double)之類的程式碼,也不要暴露出來,要學會用擴充套件類Request.Form[].ToInt();ConfigurationManager.Appsetting[""].ToDouble()等, 也可以使用 .ToValue<int/double> 之類的方式。

相關文章