1.委托声明
2.委托入门实例
namespace ConsoleApplication1
{public delegate void methodDelegate(string str);
class Program
{
static void Main(string[] args)
{
Student student = new Student();
Teacher teacher = new Teacher("王老师");
methodDelegate methodDelegate1 = new methodDelegate(student.getStudentName);
methodDelegate1 += teacher.getTeacherName; //可以指向不同类中的方法!
//methodDelegate1 += teacher.getClassName; 指向签名不符的方法时提示错误!
methodDelegate1.Invoke("张三");
Console.ReadLine();
}
}class Student
{
private String name = "";
public Student (String _name)
{
this.name = _name ;
}
public Student() {}
public void getStudentName(String _name)
{
if (this.name != "" )
Console.WriteLine("Student‘s name is {0}", this.name);
else
Console.WriteLine("Student‘s name is {0}", _name);
}
}class Teacher
{
private String name;
public Teacher(String _name)
{
this.name = _name;
}
public void getTeacherName(String _name)
{
if (this.name != "")
Console.WriteLine("Teacher‘s name is {0}", this.name);
else
Console.WriteLine("Teacher‘s name is {0}", _name);
}
public string getClassName()
{
return "Eanlish";
}
}
}
上面代码中实现对委托的调用
最后将被调用的委托输出
3.委托的实现方式
第一种:常规实现
?
1 2 3 4 5 6 7 8 |
|
第二种:多播委托
?
1 2 3 |
|
这种调用之后,按照接受参数的次数,
委托会生成一个列表,每用+=调用一次,会增加一个列表项,-=调用一次,会移除一个列表项。
第三种:委托数组
当我们定义委托
让委托形成一个数组的时候,我们可以通过遍历数组的方式来调用它
delegate double Operations(double x);class Program
{
static void Main()
{
Operations[] operations =
{
MathOperations.MultiplyByTwo,
MathOperations.Square
};for (int i = 0; i < operations.Length; i++)
{
Console.WriteLine("Using operations[{0}]:", i);
DisplayNumber(operations[i], 2.0);
DisplayNumber(operations[i], 7.94);
Console.ReadLine();
}
}static void DisplayNumber(Operations action, double value)
{
double result = action(value);
Console.WriteLine(
"Input Value is {0}, result of operation is {1}", value, result);
}
}struct MathOperations
{
public static double MultiplyByTwo(double value)
{
return value * 2;
}public static double Square(double value)
{
return value * value;
}
}
上面实例中
将委托定义好
之后就可以遍历它
委托的实现方式还有三种 持续更新中!