static void Main(string[] args) { // System.Delegate delegate // 呼叫端 - 靜態方法 NumberChange nc1 = new NumberChange(AddNum); nc1(25); Console.WriteLine("Value of num : {0}", num); // 輸出:35 // 呼叫端 - 外部方法 MyClass mc = new MyClass(); NumberChange nc2 = new NumberChange(mc.AddNum); nc2(35); Console.WriteLine("Value of num : {0}", mc.num); // 輸出:45 // 呼叫端 - 同一個委派,使用不同的方法,多型 NumberChange nc3 = new NumberChange(mc.MutliNum); nc3(2); Console.WriteLine("Value of num : {0}", mc.num); // 輸出:90 }
static void Main(string[] args) { NumberChange <int> nc1 = new NumberChange <int>(AddNum); NumberChange <int> nc2 = new NumberChange <int>(MultiNum); nc1(25); Console.WriteLine(num); nc2(5); Console.WriteLine(num); Console.ReadLine(); }
static void Main(string[] args) { NumberChange nc1 = new NumberChange(Add); nc1(13); Console.WriteLine("Value of number: {0}", number); NumberChange nc2 = new NumberChange(Multi); nc2(10); Console.WriteLine("Value of number: {0}", number); Console.ReadKey(); }
static void Main9(string[] args) { //创建委托实例 NumberChange <int> nc1 = new NumberChange <int>(AddNum); NumberChange <int> nc2 = new NumberChange <int>(MultNum); //使用委托对象调用方法 int temp = nc1(24); Console.WriteLine("value of num: {0}--{1}", getNum(), temp); nc2(5); Console.WriteLine("value of num: {0}", getNum()); }
static void Main(string[] args) { NumberChange NC1 = new NumberChange(AddNum); NumberChange NC2 = new NumberChange(MultNum); NC1(25); Console.WriteLine("Value of Num : {0} ", GetNum()); NC2(5); Console.WriteLine("Value of Num : {0} ", GetNum()); p += Fun1; p += Fun2; p.Invoke(); Console.Read(); }
public void Run() { try { if (flag) { Console.WriteLine("--------------Delegate--------------"); // 创建委托实例 NumberChange nc1 = new NumberChange(AddNum); NumberChange nc2 = new NumberChange(MultNum); Console.WriteLine(GetNum()); // 使用委托对象调用方法 nc1(10); // num(3) + 10 = 13 num(10) + 10 = 20 Console.WriteLine(GetNum()); nc2(5); // num(13) * 5 = 65 num(20) * 5 = 100 Console.WriteLine(GetNum()); Console.WriteLine("--------------Delegate Multicasting--------------"); NumberChange nc; // 委托的多播, "+" 运算符进行合并,"-" 运算符可用于从合并的委托中移除组件委托 nc = nc1; nc += nc2; // 调用多播 nc(5); // num(65) + 5 = 70 , num(70) * 5 = 350 num(100) + 5 = 105 , num(105) * 5 = 525 Console.WriteLine(GetNum()); Console.WriteLine("--------------Delegate Usage--------------"); PrintInfo pt = new PrintInfo(Print); PrintInfo pt2 = new PrintInfo(Print02); SendInfo(pt); // Print(): SendInfo() SendInfo(pt2); // Print02(): SendInfo() Console.WriteLine("--------------Delegate Case--------------"); delegatetest dt; // 委托被附上了具体的方法 dt = Multiply; Console.WriteLine($"2 * 3 = {dt(2, 3)}"); dt = Sum; Console.WriteLine($"2 + 3 = {dt(2, 3)}"); Console.ReadKey(); } } catch (Exception e) { Console.WriteLine(e.Message); } }
static void Main(string[] args) { NumberChange nc1 = new NumberChange(AddNum); nc1(12); //Aufruf der Methode int AddNum(int p) Console.WriteLine("2ter Call mit 2 angehängten Methoden"); nc1 += MultNum; // Füge zusätzlich eine weitere Methode hinzu nc1(25); nc1 -= AddNum; //Lösche AddNum Methode aus Methoden-Liste nc1(13); // Ruft nur MultNum auf Console.ReadKey(); }
static void Main(string[] args) { // Definicja delegata - dla porównania NumberChangeNormalDef normal = new NumberChangeNormalDef(Test.AddNumber); // Deklaracja instancji generycznych delegatów NumberChange <int> d1 = new NumberChange <int>(Test.AddNumber); NumberChange <int> d2 = new NumberChange <int>(Test.MultiplyNumber); // Wywołanie metod używając obiektu delegata d1(5); Console.WriteLine("Liczba: {0}", Test.GetNumber()); d2(10); Console.WriteLine("Liczba: {0}", Test.GetNumber()); Console.ReadKey(); // Wynik działania programu // Liczba: 15 // Liczba: 150 }
public static void Main(string[] args) { NumberChange n = new NumberChange(changeInt); n(9); NumberChange n2 = delegate(int b) { Console.WriteLine(b--); }; n2(9); NumberChange n3 = delegate(int x){ Console.WriteLine(x * x); }; n3(99); }
static void Main3(string[] args) { //创建委托实例 NumberChange numChange1 = new NumberChange(AddNum); NumberChange numChange2 = new NumberChange(MultNum); //使用委托对象调用方法 numChange1(20); Console.WriteLine(getNum()); numChange2(11); Console.WriteLine(getNum()); NumberChange numberChange; numberChange = numChange1; numberChange += numChange2; //调用多播 numberChange(10); Console.WriteLine(getNum()); }
static void Main(string[] args) { NumberChange nc1 = new NumberChange(AddNum); NumberChange nc2 = new NumberChange(MultiNum); Console.WriteLine(GetNum()); nc1(25); Console.WriteLine(GetNum()); var nc = nc2+nc1; nc(2); Console.WriteLine(GetNum()); nc(2); Console.WriteLine(GetNum()); nc = nc - nc1; nc(2); Console.WriteLine(GetNum()); //nc1 += nc2; nc(2); Console.WriteLine(GetNum()); Console.ReadLine(); }
static void Main10(string[] args) { //使用匿名方法创建委托实例 NumberChange nc = delegate(int x){ Console.WriteLine("anonymous method : {0}", x); return(0); }; //使用匿名方法调用委托 nc(10); //使用命名方法实例化委托 NumberChange <int> tempNc = new NumberChange <int>(AddNum); tempNc(5); //使用另一个命名方法实例化委托 tempNc = new NumberChange <int>(MultNum); //调用委托 tempNc(2); }
static void Main(string[] args) { NumberChange <int> nc1 = new NumberChange <int>(AddNum); NumberChange <string> nc2 = new NumberChange <string>(MultString); nc1(25); Console.WriteLine(num); nc2(" World"); Console.WriteLine(s1); // int MyGenericArray <int> intArray = new MyGenericArray <int>(5); for (int i = 0; i < 5; i++) { intArray.SetItem(i, i * 5); } for (int i = 0; i < 5; i++) { Console.Write(intArray.GetItem(i) + " "); } Console.WriteLine(); intArray.GenericMethod <string>("Hello Generic!"); intArray.GenericMethod <int>(100); // char MyGenericArray <char> charArray = new MyGenericArray <char>(5); for (int i = 0; i < 5; i++) { charArray.SetItem(i, (char)(i + 97)); } for (int i = 0; i < 5; i++) { Console.Write(charArray.GetItem(i) + " "); } Console.WriteLine(); int a, b; char c, d; a = 10; b = 20; c = 'I'; d = 'V'; Console.WriteLine("a = {0}; b = {1}", a, b); Console.WriteLine("c = {0}; d = {1}", c, d); Swap <int>(ref a, ref b); Swap <char>(ref c, ref d); Console.WriteLine("a = {0}; b = {1}", a, b); Console.WriteLine("c = {0}; d = {1}", c, d); }
/// <summary> /// 泛型 /// 实际:微软的一种延迟机制;Lazy; /// 定义:允许类延迟编写类或方法中的编程元素的数据类型的规范 /// 作用:一个可以和任何数据类型工作的类或方法 /// 自定义:泛型接口、泛型类、泛型方法、泛型事件、泛型委托 /// 泛型类型获取:类型信息可以在运行时使用反射获取 /// </summary> /// <param name="args"></param> static void Main(string[] args) { //声明一个整型数组 MyGenericArray <int> intArray = new MyGenericArray <int>(5); for (int i = 0; i < 5; i++) { intArray.SetItem(i, i + 1); } for (int i = 0; i < 5; i++) { Console.Write(intArray.GetItem(i) + " "); } //声明一个字符串数组 MyGenericArray <string> stringArray = new MyGenericArray <string>(5); for (int i = 0; i < 5; i++) { stringArray.SetItem(i, "aaa" + i); } for (int i = 0; i < 5; i++) { Console.Write(stringArray.GetItem(i) + " "); } Console.WriteLine(); //Example 泛型方法 int a, b; char c, d; a = 10; b = 20; c = 'I'; d = 'v'; Console.WriteLine("Int values before calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values before calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); GenerFun.Swap <int>(ref a, ref b); GenerFun.Swap <char>(ref c, ref d); Console.WriteLine("Int values after calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values after calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); //Example 泛型委托 NumberChange <int> nm1 = new NumberChange <int>(GenerDelegate.AddNum); NumberChange <int> nm2 = new NumberChange <int>(GenerDelegate.MulNum); nm1(10); Console.WriteLine(GenerDelegate.GetNum()); nm2(10); Console.WriteLine(GenerDelegate.GetNum()); Console.Read(); }