分別有武漢人、上海人、廣東人,三種不同城市的學生,問候的口語不一樣,模擬見面打招呼。
/// /// 學生類
///
public class student
public string name
public int classid
public int age
}
public enum usertype
打招呼:
/// /// 問好
///
public void sayhi(usertype type)
console.writeline("你好!");
}
呼叫:
student student = new student()
;student.sayhi(usertype.wuhan);
student.sayhi(usertype.shanghai);
student.sayhi(usertype.guangdong);
/// /// 武漢人打招呼
///
public void sayhiwuhhan()
/// /// 上海人打招呼
///
public void sayhishanghai()
/// /// 廣東人打招呼
///
public void sayhiguangdong()
呼叫:
注意:修改此方法存在風險,函式發生了改變,可能會引起其他的邏輯,需要重複測試
優點:新增通用語句方便,只需要在函式前面新增即可。
缺點:新增一種打招呼方式就需要修改列舉型別和打招呼的函式邏輯,帶來風險。
優點:每個城市的打招呼方法相對獨立,互不干擾。
缺點:新增通用語句麻煩,需要在每個打招呼的函式前面新增。
以上這兩種都有不完美的地方----有沒有既可以沒有那麼多的重複**,也相對穩定的方案呢?--有
sayhiperfect---
傳遞列舉的時候:目的是為了選擇不同的業務邏輯:既然最終都是要選擇業務邏輯的;--就可以傳遞邏輯唄;邏輯是什麼--邏輯其實就行為---行為就是方法---方法的傳遞;就需要把方法當做引數一樣傳遞過來;--委託在例項化的時候,委託就要乙個方法;就可以傳遞乙個委託,把方法放在委託中傳遞過來;
public delegate void sayhidalegate();
/// /// 既沒有重複**-0-也相對穩定的方法---完美方法;
///
public void sayhiperfect(sayhidalegate sayhidalegate)
sayhidalegate sayhidalegate = new sayhidalegate(student.sayhiwuhhan);
student.sayhiperfect(sayhidalegate);
sayhidalegate sayhidalegate1 = new sayhidalegate(student.sayhishanghai);
student.sayhiperfect(sayhidalegate1);
sayhidalegate sayhidalegate2 = new sayhidalegate(student.sayhiguangdong);
student.sayhiperfect(sayhidalegate2);
sayhidalegate sayhidalegate3 = new sayhidalegate(student.sayhibeijing);
student.sayhiperfect(sayhidalegate2);
即使新增了一種新的打招呼方式,只需要新增乙個方法即可,既不會影響其他打招呼的方法**邏輯,也實現了擴充套件。
委託系列08 委託和事件的區別
emsp 案例 通過委託和事件實現相同的動作 public class cat 方式二 miaoaction?invoke 如果不為null 就執行後面的動作 console.writeline this is delegate public class cat 方式二 miaoaction?inv...
委託與事件 閒聊系列(一)
net開發人員對委託與事件應該不陌生,它們的在程式中的應用還是挺廣泛的。對於剛開始接觸或接觸時間不太長的朋友來說,這兩個概念既熟悉又陌生。之所以說熟悉,因其無處不在 而之所以陌生則是因為對其的理解始終停留在表面,無法更深入的領悟。你是否有過呆在宿舍玩遊戲讓同學幫忙帶飯的經歷?是否有過讓同學代收快遞的...
委託 C 委託 delegate 的介紹與使用
委託 delegate 即委託別人辦事 相當於 中介 委託某個方法來實現具體的功能。委託是一種引用型別,是方法的抽象,宣告時與方法相似,但不能稱之為方法。它儲存的是一系列具有相同引數和返回型別的方法位址。呼叫委託時,委託包含的所有方法都將被執行。委託在使用時遵循三步走的原則,即定義宣告委託 例項化委...