我终于用到了泛型

99 阅读1分钟

 

我终于用到了泛型

左直拳

泛型是。NET2。0出现的新东西。惭愧,3。0已经出了很久了,可我现在才开始用。落后啊落后,简直屎一堆。

delegate void SetEnableCallback(System.Windows.Forms.Control objCtrl, bool enable);

 

//声明

private void _SetText<TObject>(TObject objCtrl, string text)

where TObject : System.Windows.Forms.Control

{

if (objCtrl.InvokeRequired)

   {

       SetTextCallback d = new SetTextCallback(_SetText);

       this.Invoke(d, new object[] { objCtrl, text });

   }

   else

   {

       objCtrl.Text = text;

   }

}

 

//调用

public int TotalNum

{

set { _SetText<TextBox>(this.txt_Total, value.ToString()); }

}

 

在声明里面,之所以要限定TObject的类型为窗体控件

where TObject : System.Windows.Forms.Control

是因为不如此,就无法使用象objCtrl.InvokeRequired这些只有窗体控件才会用到的语句。

本来我象是限定为TextBox,Button类型的,语句如下:

private void _SetText<TObject>(TObject objCtrl, string text)

where TObject : TextBox,Button

但这样始终编译不过去,说是一山不容二虎,类类型只能排在前面,将TextBox排在前面,说Button错;将Button排在前面,说TextBox错。真不知道为什么会有这样的规定。最后只好将它们限定为父类型:Control。

 

泛型的好处是可以写出适应性极好的代码。据说效率很高,没有类型转换、装箱拆箱带来的性能损失。

大江东去,浪淘尽,

千古风流人物。

故垒西边,人道是,

三国周郎赤壁。

乱石穿空,惊涛拍岸,

卷起千堆屎。