C#設計技巧總結

來源:互聯網
上載者:User
做為一個程式員如何從細節上來提高我們的編程水平?下面幾點,應該完全沒有理由不掌握的:
1。編碼習慣
對於一個團隊開發來說,編碼習慣是非常重要的,至少我們需要按照下面一些命名規範:類名:每個單詞的第一個字母大寫  eg: MyClass欄位:第一個單詞的第一個字母小寫 eg: myFiled 介面:用I開頭;要使用有意義的變數和名稱空間,象在定義個異常類的時候我們一般是以Exception為尾碼,有傳回值的方法要以Get開頭等等;所有的成員變數都應該申明在頂部,同時使用一個空行來將他們和屬性、方法分開;總是將大括弧放在一個新行上。
2。委託
對於初級程式員來說,委託和事件的確難倒了很多人,包括我在剛進入公司的時候都沒搞懂。呵呵,只怪自己在學校的時候沒好好學,不要砸我哈。理解委託可以從一下幾個方面入手:首先我們可以把他想像成C++中的函數指標(這個不用說吧,那個大學都開了C/C++課程的),但是不同在於委託是完全物件導向的(既封裝方法又封裝執行個體)如何理解?比如有一個方法,有很多的類都要去使用和實現它,有2個方法可以完成,最開始把方法寫一個類,然後把它抽象為一個基類,再去派生出子類,問題是在C#中只是支援單繼承,這樣有時就會造成在方法調用上的浪費,如在基類中有方法A,B,C但是可能我有個子類不會都需要A,B,C這三個方法;此時委託可以完全避免此類問題。舉個形象的例子,如老闆每天有很多事情要做,這時為了減輕他的負擔,他可能考慮去找個代理(就是助手),一天他給他的助手說,我需要做飛機從成都到北京,這時他的助手就會說,OK,我把機票給你訂好。
3。Equals()的使用
用來判斷兩個對象的引用是否指向同一個對象,有時候這個功能不能滿足我們的需求,如:有2個人的名稱相等,我們則認為對象是相等的。這時就只能自訂Equals方法了:
public  clas  User
{
 public string FirstName;
 public string LastName;
public override bool Equals(object obj)
{
  if(obj==null)return false;
  if((obj.GetType().Equals(this.GetType())==false) return false;
  User other;
  other=(User)obj;
  return this.FirstName.Equals(other.FirstName)&&this.LastName.Equals(other.LastName);
}
public override int GetHashCode()
{
  return this.FirstName.GetHashCode()+this.LastName.GetHashCode();
}
}
ps:如果重寫了Equals,則也需要重寫GetHashCode否則在程式編譯的時候就會發出警告!
對於hashtable其作用就是提供高效的搜尋,它是基於(鍵/值)的形式並且是唯一的。
4.IDisposable
目的是清理對象。一般情況我們都是開啟了,使用完後就關閉掉,有時為了實現一些更進階的需求需要實現IDisposable這個介面。
public class MyClass:Disposable
{
 public void Dispose()
 {
   obj.close();
 }
}
在使用這個的時候需要考慮4點:釋放所有非受控資源;釋放所有受控資源;設定一個標誌來表明我們所釋放的對象已經被處理過了。這時需要在一個公用的方法中檢查這種狀態。以防對象被釋放但又啟用的情況;終止failnes方法。
5. ICloneable
複製實際上就是對象的複製。
User obj1=new User("kim","luo",1000.0M);
User obj2;
obj2=obj1.Clone();
shallow淺複製:只是複製頂級對象
public class User:ICloneable
{
 public object Clone()
 {
  return new User(this.FirstName,this.LastName,this.Balance);
 }
}
相當於
public class User:ICloneable
{
 public object Clone()
 {
  return this.MemberwiseClone();
 }
}
deep 深複製:複製對象和子物件
6.String相關
string 是個不可變對象。字串串連操作"+"並不改變當前字串,只是建立並返回新的字串,速度慢,而StringBuilder類,卻不一樣,我們主要使用他來進行字串的串連操作,速度非常快。
7。字串駐留
string str1="abc";
string str2="abc";
實際上str1和str2在記憶體中是共用同一個記憶體位址的,而不是分別佔用一塊記憶體位址,這個原因是由於hash表。當你產生一個新的字串的時候它會先尋找在系統記憶體裡有沒有相應的字串,如果有它就不會去新分配一塊空間。以達到節省記憶體空間的目的。
但是這種情況就不一樣了:
string str1="abc";
string str2="a";
string str3="bc";
string str4=str2+str3;
那麼str1和str4雖然輸出都是abc,但是它們在系統中不是共用同一塊記憶體。但是為了達到這個效果
就是讓它們共用同一塊記憶體。就可以調用這2個方法:public static intern(String str);public static isIntern(String str)來完成。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.