C#如何创建一个简单委托。
2016-04-06 21:22
441 查看
委托和类一样,是一种用户自定义的类型。
delegate void PrintFunction();
class Test
{
public void Print1()
{
Console.WriteLine("Print1 -- instance");
}
public static void Print2()
{
Console.WriteLine("Print2 -- static");
}
}
class Program
{
static void Main()
{
Test t = new Test();
//创建一个测试类实例。
PrintFunction pf; //创建一个空委托。
pf=t.Print1; //实例化并初始化该委托。
//给委托增加3个另外的方法。
pf+=Test.Print2;
pf+=t.Print1;
pf+=Test.Print2;
//现在,委托含有4个方法。
if( null != pf) //确定委托中有方法。
pf();
else
Console.WriteLine("Delegate is empty");
}
}
这段demo输出的结果为:
Print1 -- instance
Print2 -- static
Print1 -- instance
Print2 -- static
创建有返回值的委托。
Delegate int MyDel(); //声明有返回值的方法。
class MyClass
{
int IntValue=5;
public int Add2(){IntValue+=2;return IntValue;}
public int Add3(){IntValue+=3;return IntValue;}
}
class Program
{
static void Main()
{
MyClass mc=new MyClass();
MyDel mDel=mc.Add2; //创建并初始化委托。
mDel+=mc.Add3;
//增加方法。
mDel+=mc.Add2;
//增加方法。
Console.WriteLine("Value:{0}",mDel());
}
}
这段demo的结果为:
Value:12
调用带有引用参数的委托。
delegate void MyDel(ref int X);
class MyClass
{
public void Add2(ref int x){x+=2;}
public void Add3(ref int x){x+=3;}
static void Main()
{
MyClass mc=new MyClass();
MyDel mDel=mc.Add2;
mDel+=mc.Add3;
mDel+=mc.Add2;
int x=5;
mDel(ref x);
Console.WriteLine("Value:{0}",x);
}
}
demo的输出结果为:
Value: 12
delegate void PrintFunction();
class Test
{
public void Print1()
{
Console.WriteLine("Print1 -- instance");
}
public static void Print2()
{
Console.WriteLine("Print2 -- static");
}
}
class Program
{
static void Main()
{
Test t = new Test();
//创建一个测试类实例。
PrintFunction pf; //创建一个空委托。
pf=t.Print1; //实例化并初始化该委托。
//给委托增加3个另外的方法。
pf+=Test.Print2;
pf+=t.Print1;
pf+=Test.Print2;
//现在,委托含有4个方法。
if( null != pf) //确定委托中有方法。
pf();
else
Console.WriteLine("Delegate is empty");
}
}
这段demo输出的结果为:
Print1 -- instance
Print2 -- static
Print1 -- instance
Print2 -- static
创建有返回值的委托。
Delegate int MyDel(); //声明有返回值的方法。
class MyClass
{
int IntValue=5;
public int Add2(){IntValue+=2;return IntValue;}
public int Add3(){IntValue+=3;return IntValue;}
}
class Program
{
static void Main()
{
MyClass mc=new MyClass();
MyDel mDel=mc.Add2; //创建并初始化委托。
mDel+=mc.Add3;
//增加方法。
mDel+=mc.Add2;
//增加方法。
Console.WriteLine("Value:{0}",mDel());
}
}
这段demo的结果为:
Value:12
调用带有引用参数的委托。
delegate void MyDel(ref int X);
class MyClass
{
public void Add2(ref int x){x+=2;}
public void Add3(ref int x){x+=3;}
static void Main()
{
MyClass mc=new MyClass();
MyDel mDel=mc.Add2;
mDel+=mc.Add3;
mDel+=mc.Add2;
int x=5;
mDel(ref x);
Console.WriteLine("Value:{0}",x);
}
}
demo的输出结果为:
Value: 12
相关文章推荐
- C# 一段绘图代码 在form_load事件不能显示图
- C# 一段绘图代码 在form_load事件不能显示图
- C# Func<>托付
- 如何删除PDF文档里的空白页
- 解决C# FileUpload上传文件过大的时候出现的错误
- C# 统计字符串类型
- C#中WebApi接口传参不再困惑:传参详解
- C#WebBrowser控件使用教程与技巧收集
- 使用xUnit,EF,Effort和ABP进行单元测试(C#)
- 安装VS2015报未能正确加载"CSharpPackage"包 和 未能创建 Visual C# 2015编译器
- C# 模拟鼠标移动与点击
- C# 合理利用异步方法
- C#中集合的使用--ArrayList
- C#使用多态求矩形及圆形的面积和周长
- C#抽象类
- [转]C#程序无法在64位系统上运行之.NET编译的目标平台
- C#打开新页面
- 算法實例-C#-歸併排序-MergeSort
- [转]C# int.ToString()
- C# 多线程总结