delegate is similar to the pointer of C++. A delegate has parameters and return type, and it can represent methods
with the same paramters and return type.
public delegate string show(string s, int i);
For example, the Math methods can be represented by a delegation.
public delegate double dg(double db);
dg dlg = new dg(System.Math.Cos);
double res = dlg(2.3); //-0.666276021279824
dg dlg2 = new dg(System.Math.Sin);
double res2 = dlg2(2.3); //0.74570521217672