刚接触c#不久,对于委派的好处,不是很清楚,先来一段典型的代码:using System;namespace ConsoleApplication1
{
class Program
{
delegate int MathOp(int i1, int i2);
static void Main(string[] args)
{
MathOp op1 = new MathOp(Add);
MathOp op2 = new MathOp(Multiply);
Console.WriteLine(op1(100, 200));
Console.WriteLine(op2(100, 200));
//上面的代码完全可以用以下实现,
//Console.WriteLine(Add(100,200));
//Console.WriteLine(Multiply(100, 200));
Console.ReadLine();
} //静态方法(两个数加相)
public static int Add(int i1, int i2)
{
return i1 + i2;
} //静态方法(两个数相乘)
public static int Multiply(int i1, int i2)
{
return i1 * i2;
}
}
}
正如上面代码里的一样,感觉用委派做的事,完全不用委派也可以做到,那么C#中的委派到底有什么好处或是作用,存在即合理,微软既然在C#中弄出了一个"委派",肯定有他的用意?哪位给详细解释一下?谢谢
{
class Program
{
delegate int MathOp(int i1, int i2);
static void Main(string[] args)
{
MathOp op1 = new MathOp(Add);
MathOp op2 = new MathOp(Multiply);
Console.WriteLine(op1(100, 200));
Console.WriteLine(op2(100, 200));
//上面的代码完全可以用以下实现,
//Console.WriteLine(Add(100,200));
//Console.WriteLine(Multiply(100, 200));
Console.ReadLine();
} //静态方法(两个数加相)
public static int Add(int i1, int i2)
{
return i1 + i2;
} //静态方法(两个数相乘)
public static int Multiply(int i1, int i2)
{
return i1 * i2;
}
}
}
正如上面代码里的一样,感觉用委派做的事,完全不用委派也可以做到,那么C#中的委派到底有什么好处或是作用,存在即合理,微软既然在C#中弄出了一个"委派",肯定有他的用意?哪位给详细解释一下?谢谢
解决方案 »
- C#label的visible属性由timer触发,visiblechanged事件中循环播放一个声音,为什么声音只播放较短的事件就停止了
- GridView中有分页 而每行数据中有checkbox 用什么保存分页的checked状态
- 如何往回查找字符串?
- 关于传值
- 求Qp 的C#解码,请教社区高手,支持者有分,
- 关于给线程传递参数的问题
- Microsoft Visual Studio .NET 2003在添加WinFrom 窗体的时候,弹出一个对话框Microsoft Development Environment 'collection.parent'无法新建窗体?重装了,好几遍依然如此
- WPF初始化出错,求解答
- 一个关于Response.Redirect语句的问题
- 当我将数据表邦定到dataGrid上并显示出来时,在dataGrid上选择一条记录然后按Delete 键(键盘上的删除键)记录就被删除了,请问如捕捉这
- 讨论:一些编码规范,在MSDN的类库开发人员设计指南里面没有提到的!
- 为什么有些C#写的代码(应该是VS2003上面写的)在我的VS2005上面编译会出问题?
Console.WriteLine(op3(100, 200));
比如有一个类
delegate int CompareObject(object left,object right);left>right return 1; equals return 0; else return -1;Class A
{
public static void QuickSort(object[] sortArray,CompareObject compareMethod)
{
for(int i=0;i<sortArray.Length;i++)
{
for(int j=0;j<sortArray.Length;j++)
{
if(compareMethod(sortArray[j],sortArray[i])<0)
{
object temp=sortArray[i];
sortArray[i]=sortArray[j];
sortArray[j]=temp;
}
}
}
}
}
这样 可以传入compareMethod(自己定义的委托)来对不同对象进行排序