首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

委托解决方案

2013-10-21 
委托委托:是一种类型安全的函数指针。可是下面用到的委托好像并不代表什么函数,这是怎么回事呢?struct DEVI

委托
委托:是一种类型安全的函数指针。可是下面用到的委托好像并不代表什么函数,这是怎么回事呢?
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;
   };
}

热点排行