委托是一种数据类型,像类一样(可以声明委托类型变量)
为什么用委托?
在代码中间动态的调用方法
namespace _委托
{
class Program
{
static void Main(string[] args)
{
// MyClass mc = new MyClass();
//2.使用委托第二步:声明委托变量,并赋值。
//声明了一个委托变量md,并且new了一个委托对象,并且把方法M1c传递了进去
//即md委托保存了M1方法。
MyDelegate md = new MyDelegate(M1);
//3.调用md委托的时候就相当于调用了M1方法。
md();
Console.WriteLine("ok");
Console.ReadKey();
}
static void M1()
{
Console.WriteLine("我是一个没有返回值没有参数的方法。");
}
}
//1.定义委托类型。
//定义一个委托类型,用来保存无参数,无返回值的方法。
//定义了一个名字叫MyDelegate的类型,并且这个类型是个委托,而且只能存储没有返回值,没有参数的方法。
//委托要定义在命名空间中和类是同一个级别的。
public delegate void MyDelegate();
//定义类一个MyClass的一个类型。
public class MyClass
{
}
}
输出:
我是一个没有返回值没有参数的方法。
ok
namespace _08Test
{
public class TestClass
{
//public void ChangeStrings(string[] strs)
//{
// for (int i = 0; i < strs.Length; i++)
// {
// strs[i] = "★" + strs[i] + "★";
// }
//}
public void ChangeStrings(string[] strs, GetStringDelegate change)
{
for (int i = 0; i < strs.Length; i++)
{
strs[i] = change(strs[i]);
}
}
}
public delegate string GetStringDelegate(string name);
//定义一个委托,一个用来存储没有返回值,没有参数的委托
public delegate void WriteTimeDelegate();
}
namespace _09ConsoleApplicationTest
{
class Program
{
static void Main(string[] args)
{
TestClass tc = new TestClass();
//string[] names = new string[] { "ZhaoHuimeng", "LangJixiang", "XiongWei", "LiuWanren", "ShiGuoqing" };
//tc.ChangeStrings(names);
//for (int i = 0; i < names.Length; i++)
//{
// Console.WriteLine(names[i]);
//}
//Console.ReadKey();
string[] names = new string[] { "ZhaoHuimeng", "LangJixiang", "XiongWei", "LiuWanren", "ShiGuoqing" };
tc.ChangeStrings(names, ChangeString);
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine(names[i]);
}
Console.ReadKey();
}
static string ChangeString(string name)
{
return name.ToUpper();
}
static void PrintTimeToConsole()
{
Console.WriteLine(System.DateTime.Now.ToString());
}
}
}