读书人

委托解决方案

发布时间: 2013-10-21 17:00:48 作者: rapoo

委托
委托:是一种类型安全的函数指针。可是下面用到的委托好像并不代表什么函数,这是怎么回事呢?
struct DEVICEINFO
{
public int nDeviceID;
public string strModel;
public string strIpAddress;
public int nPort;
public string strId;
public string strPasswd;
public int hDevice;
public int hMediaSource;
}

private List<DEVICEINFO> DevInfo = new List<DEVICEINFO>();

......

private void BTN_ADD_Click(object sender, EventArgs e) //Add
{
DEVICEINFO temp = new DEVICEINFO();
temp.hDevice = hDevice;
hDevice = 0;
temp.nDeviceID = nDeviceID;
temp.strModel = strModel;
temp.strIpAddress = strIpAddress;
temp.nPort = nPort;
temp.strId = strID;
temp.strPasswd = strPW;
DevInfo.Add(temp);
......
}
private void BTN_REMOVE_Click(object sender, EventArgs e) //Delete
{
int nDeviceID = int.Parse(LISTVIEW_DEVICE.Items[nSelItem].SubItems[0].Text);
DEVICEINFO result = DevInfo.Find(
delegate(DEVICEINFO temp)


{
return temp.nDeviceID == nDeviceID;
}
);
int hDevice = result.hDevice;
}
你问问题的时候是否觉得有所不妥?
“委托:是一种类型安全的函数指针。”
这句话可以这样来拆。委托是指针,是什么样的指针?是安全的函数指针。
也就是说:委托是指针,是本意;其他“安全的函数”是修饰。

好了,既然是指针,其代表的是一个地址,充其也是个函数入口地址。

地址和函数方法如何能画等号呢?又如何代表函数呢?
[解决办法]
delegate(DEVICEINFO temp)
{
return temp.nDeviceID == nDeviceID;
}

这是匿名函数,这段代码编译后和你写一个函数是一样的效果。

你是觉得temp.nDeviceID == nDeviceID;这个红的的奇怪了吧,

这个叫做匿名函数的“外部变量”。

详细的移步这篇博客

[解决办法]
delegate(DEVICEINFO temp)
其实是
Func<T, bool>(T t);
或者
Predicate<T>(T t);
匿名委托

delegateIns = 委托实现;
DEVICEINFO result = DevInfo.Find(委托实现);
bool 委托实现(DEVICEINFO temp)
{
return temp.nDeviceID == nDeviceID;
}
[解决办法]
和结构没有关系的,楼主比较混乱啊
看看以下是否能清楚些

//申明一个委托
delegate int A();
private void B()
{
//也就是说,我不必新写一个函数,再去想个难忘的名字,再重新在程序中调用函数
A kof = delegate()
{
return 9;
};
}

读书人网 >C#

热点推荐