public override void Cooking(int money) { var joey = new Joey(); GetSalt getSalt = joey.BuySalt; Console.WriteLine("C#1.0的媽媽,花{1}元,透過Joey的BuySalt(),拿{0}炒菜", getSalt(money).Name, money.ToString()); }
public delegate Salt GetSalt(int money); //定義委派的簽章 public override void Cooking(int money) { #region 宣告變數,assign joey的BuySalt()給變數 var joey = new Joey(); GetSalt getSalt = new GetSalt(joey.BuySalt); #endregion Console.WriteLine("C#1.0的媽媽,花{1}元,透過Joey的BuySalt()結果,拿{0}炒菜", getSalt(money).Name, money.ToString()); //-------------------- //實際執行委派 }
public override void Cooking(int money) { GetSalt getSalt = x => { if (x > 100) { return(new RockSalt()); } else { return(new SeaSalt()); } }; Console.WriteLine("C#3.0的媽媽, 花{1}元,透過lambda敘述式結果,拿{0}炒菜", getSalt(money).Name, money.ToString()); }
public override void Cooking(int money) { //delegate(參數){委派執行內容} GetSalt getSalt = delegate(int moneyForSalt) { if (moneyForSalt > 100) { return(new RockSalt()); } else { return(new SeaSalt()); } }; Console.WriteLine("C#2.0的媽媽, 花{1}元,透過匿名delegate方法結果,拿{0}炒菜", getSalt(money).Name, money.ToString()); }
public override void Cooking(int money) { GetSalt getSalt = new GetSalt( moneyForSalt => //1.不再透過delegate關鍵字宣告,而透過=>代表 { //2.可以不必宣告參數型別(除非推斷不出來) if (moneyForSalt > 100) //3.只有一個參數,可以不用加小括號() { return(new RockSalt()); } else { return(new SeaSalt()); } }); Console.WriteLine("C#1.0的媽媽,花{1}元,透過Joey的BuySalt()結果,拿{0}炒菜", getSalt(money).Name, money.ToString()); //-------------------- //實際執行委派 }
public delegate Salt GetSalt(int money); //定義委派的簽章 public override void Cooking(int money) { GetSalt getSalt = new GetSalt ( delegate(int moneyForSalt) //直接撰寫委派方法的內容,assign給getSalt變數 { if (moneyForSalt > 100) { return(new RockSalt()); } else { return(new SeaSalt()); } } ); Console.WriteLine("C#2.0的媽媽,花{1}元,透過Joey的BuySalt()結果,拿{0}炒菜", getSalt(money).Name, money.ToString()); //-------------------- //實際執行委派 }