委托是这样的吗
public class a1{ public delegata void del(string ss);
public void hhhglj()
{ messagebox.show("dddddddddddddd");
}
}
del ss=new del(hhhglj);
ss(textbox1.text);
这就是所谓的委托吗?其中实际的好处是什么呢?,我实在不清楚\不明白 --------------------编程问答-------------------- 能把方法当参数传递,使程序更抽象 --------------------编程问答-------------------- 委托可以替代C++的函数指针,而且还可以用于回调函数.还是很有用处的,实例委托时候就传入具体的方法参数
是你写的这个del ss=new del(hhhglj); --------------------编程问答-------------------- 平常我们能传递字符串,数组等等。
而委托使得我们能把函数传来传去。
using System;--------------------编程问答-------------------- 如上面所说,委托可以将方法当作参数来传递,尤其是当把参数设定为委托时,更加方便灵活。 况且委托也可以和事件结合 --------------------编程问答-------------------- 你这个写的有问题吧,del是一个带一个参数的委托,但hhhglj是一个无参方法,ss能实例化成功? --------------------编程问答-------------------- 委托还有一个重要的应用是在 事件 上,通过委托处理各种事件
public delegate void Del(string ss);
public class A1
{
public Del StringDeleted;
public DeleteString()
{
if( StringDeleted != null )
{
StringDeleted("Someone has deleted my string");
}
}
}
public class Program
{
static void Main()
{
A1 a = new A1();
a.DeleteString();
Console.ReadLine();
a.StringDeleted = OnStringDelete; //<--- 传递一个函数,以便得到通知。
a.DeleteString(); //Log: Someone has deleted my string
Console.ReadLine();
}
static void OnStringDelete(string ss)
{
Console.WriteLine("Log: " + ss );
}
}
事件引发---〉对应的handller(委托)---〉执行委托的方法
--------------------编程问答-------------------- 其实可以这样理解,委托可以看作是方法的集合,该方法带有相同的参数列表
--------------------编程问答-------------------- FYI
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication7
{
class Program
{
public delegate void Del(string ss);
public static void Show(string ss)
{
Console.WriteLine(ss);
}
public static void ShowLZ(string ss)
{
Console.WriteLine("楼主,{0}", ss);
}
static void Main(string[] args)
{
Del del1 = Show;
del1("其实我的真正身份是Show,是del1装B装的");
Del del2 = ShowLZ;
del2("给分给我啊");
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate_01
{ //the delegate defined here has none arguments
class Currency
{
public uint Dollars;
public ushort Cents;
/// <summary>
/// constructor function
/// </summary>
/// <param name="dollars"></param>
/// <param name="cents"></param>
public Currency(uint dollars, ushort cents)
{
if (cents >99)
{
dollars += (uint)(cents / 100);
cents = (ushort)(cents % 100);
}
this.Dollars = dollars;
this.Cents = cents;
}
/// <summary>
/// override ToString() function
/// </summary>
/// <returns></returns>
public override string ToString()
{
return string.Format("{0} Dollars {1} Cents", this.Dollars, this.Cents);
}
/// <summary>
/// add a static function with the same signature as Currency
/// </summary>
/// <returns></returns>
public static string GetCurrencyUnit()
{
return "Cognizant.com";
}
}
class Program
{
// define a delegate with none arguments
private delegate string GetAString();
static void Main(string[] args)
{
int x = 100;
GetAString astr = new GetAString(x.ToString); // int.ToString();
Console.WriteLine("x string is \"{0}\"", astr());
Currency balance = new Currency(13,153);
astr = new GetAString(balance.ToString); // the parameter should be the method's name only
// the ToString() function here was override in the class Currency
Console.WriteLine("balabce string is \"{0}\"", astr ());
astr = new GetAString(Currency.GetCurrencyUnit); // the parameter should be the method's name only
Console.WriteLine("GetAString : \"{0}\"", astr());
Console.ReadKey();
}
}
}
刚好这两天在学习委托。
委托要注意的地方就是
astr = new GetAString(balance.ToString)
balance.ToString 是一个 返回类型是 string 无参数的函数, 和 定义 delegate 的签名要一样!
private delegate string GetAString(); --------------------编程问答-------------------- 关注下 ~~ --------------------编程问答-------------------- 委托 顾名思意就是 某种方法的委托(代理)中心
比较生动的讲解请看http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html --------------------编程问答-------------------- 委托,委托,不大好理解。
今天记住一句话:把函数当参数。 --------------------编程问答-------------------- --------------------编程问答-------------------- 在异步中很好用 --------------------编程问答-------------------- 委托是用来实现一个线程去操作另外一个线程中的控件的,这是因为C#中不允许一个线程去直接对另外的线程中的控件进行操作,这是不安全的,它会引起异常.
委托是一个用来解决这种问题的方法,也可以使用BackGroundWork
补充:.NET技术 , C#