C#泛型之泛型委托

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

None.gif      // 定义有返回值的委托 
None.gif
     public   delegate   string  GenricDelegate < T, S > (T title, S author);
None.gif
None.gif    
// 定义事件委托。
None.gif
     public   delegate   void  GenricDelegateEnent < E,P > (E Name,P Address);
None.gif
None.gif    
public   class  GenericDelegateClass < V,F >
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
//声明委托
InBlock.gif
        public GenricDelegate<V, F> GdeleValue;
InBlock.gif        
//声明事件委托
InBlock.gif
        public event GenricDelegateEnent<V, F> GdEvent = null;
InBlock.gif
InBlock.gif        
public string GetValues(V title, F author)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//调用委托
InBlock.gif
            return GdeleValue(title, author);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public GenericDelegateClass()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public void InvokeEvent(V name, F address)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if (GdEvent != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
//调用委托
InBlock.gif
                GdEvent(name, address);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

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

None.gif          private   void  btnDelegate_Click( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif
InBlock.gif            GenericDelegateClass
<stringstring> gd = new GenericDelegateClass<stringstring>();
InBlock.gif            
//将DelegateReturn事件梆定给GdeleValue
InBlock.gif
            gd.GdeleValue = new GenricDelegate<stringstring>(DelegateReturn);
InBlock.gif            
//将GenericEvent事件梆定给GdEvent
InBlock.gif
            gd.GdEvent += new GenricDelegateEnent<stringstring>(GenericEvent<string,string>);
ExpandedBlockEnd.gif        }

None.gif
None.gif        
public   string  DelegateReturn < T,S > (T title,S author)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
return title.ToString() + author;
ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   void  GenericEvent < V, F > (V name, F address)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
//
ExpandedBlockEnd.gif
        }

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

转载于:https://www.cnblogs.com/laihua/archive/2006/11/17/564044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值