注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Bioinformatics home

 
 
 

日志

 
 

C#泛型之泛型委托  

2014-11-14 12:42:45|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


在看泛型委托之前还需要先了解委托的概念。
这里讲的委托有两种类型一种是有返回值的,另一种是事件委托。

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home    //定义有返回值的委托 
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
    public delegate string GenricDelegate<T, S>(T title, S author);
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home    
//定义事件委托。
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
    public delegate void GenricDelegateEnent<E,P>(E Name,P Address);
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home    
public class GenericDelegateClass<V,F>
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home    
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
//声明委托
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
        public GenricDelegate<V, F> GdeleValue;
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
//声明事件委托
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
        public event GenricDelegateEnent<V, F> GdEvent = null;
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
public string GetValues(V title, F author)
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            
//调用委托
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
            return GdeleValue(title, author);
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        }

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
public GenericDelegateClass()
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        }

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
public void InvokeEvent(V name, F address)
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            
if (GdEvent != null)
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home                
//调用委托
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
                GdEvent(name, address);
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            }

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        }

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home    }

上面我们定义及调用了泛型委托,接下来就来梆定委托。

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        private void btnDelegate_Click(object sender, EventArgs e)
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            GenericDelegateClass
<stringstring> gd = new GenericDelegateClass<stringstring>();
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            
//将DelegateReturn事件梆定给GdeleValue
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
            gd.GdeleValue = new GenricDelegate<stringstring>(DelegateReturn);
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            
//将GenericEvent事件梆定给GdEvent
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
            gd.GdEvent += new GenricDelegateEnent<stringstring>(GenericEvent<string,string>);
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        }

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
public string DelegateReturn<T,S>(T title,S author)
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            
return title.ToString() + author;
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        }

C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
private void GenericEvent<V, F>(V name, F address)
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home        
{
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home            
//
C泛型之泛型委托 - xiaofeng1982 - Bioinformatics home
        }

在这里我们看到我在梆定DelegateReturn的时候并没有带泛型参数。在这里的泛型参数其实是没什么意义的。因为他的类型取决于调用委托的方法的类型。也就是在前面那段代码中InvokeEvent方法的类型,这里的DelegateReturn要用泛型方法是可以随时跟InvokeEvent的参数类型保持一至。这样梆定后我们再来调用gd.GetValues("my generic post","fastyou");这样调用的其实就是DelegateReturn的方法,这就是委托的好处了,同样调用gd.InvokeEvent("my generic post","fastyou");就是GenericEvent方法。

  评论这张
 
阅读(818)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017