CSkin博客

标题: 【C#泛型的好处】举个最简单例子说明吧 [打印本页]

作者: Jowen    时间: 2015-5-22 14:35
标题: 【C#泛型的好处】举个最简单例子说明吧
说明:
来这个论坛有些日子了,很少看到有关泛型的例子,我发个简单的希望可以让有兴趣的人重视起来。我发的这个代码虽然简单,但是主要是抛砖引玉作用。引言:你每次清空控件数据时还在一个一个控件.Text=""吗或者清理不同的控件数据写多个子方法。学会泛型之后,你会发现写一个方法就可以适应所有的控件。

代码见下面:
[C#] 纯文本查看 复制代码
 
/// <summary>
       /// 泛型清除内容.T类型注意与控件一致,如果你的控件为自定义控件,记得是自定义控件的类名哦
       /// </summary>
       /// <param name="ctrlTop">清除的控件(含子控件)</param>
       /// <param name="t">参数代入null即可</param>
       public static void ClearText<T>(Control ctrlTop,T t)
       {
           if (ctrlTop.GetType()==typeof(T))
           {
               ctrlTop.Text = "";
           }
           else
           {
               foreach (Control ctrl in ctrlTop.Controls)
               {
                   ClearText(ctrl,t); //循环调用
               }
           }
       }


调用更简单:
[C#] 纯文本查看 复制代码

ClearText<TextBox>(this, null);//清除文本框
ClearText<ComBox>(this, null);//清除下拉框



作者: Jowen    时间: 2015-5-22 14:36
清除第二个为ComboBox
作者: 乔克斯    时间: 2015-5-22 15:09
不错~赞一个。
作者: Jowen    时间: 2015-5-22 15:10
乔克斯 发表于 2015-5-22 15:09
不错~赞一个。

谢谢,以后我有好的源码会分享出来给大家的
作者: 乔克斯    时间: 2015-5-22 15:11
Jowen 发表于 2015-5-22 15:10
谢谢,以后我有好的源码会分享出来给大家的

恩~多来多送~期待你更好的资源分享。
作者: M188    时间: 2015-5-23 09:20
不错   赞一个
作者: fessicon    时间: 2015-5-23 13:25
简单,但很实用,感谢分享
作者: xiaobo    时间: 2015-6-8 17:37
我也来玩玩,虽然与LZ不是同一个意思,不过同样是泛型的使用:
[C#] 纯文本查看 复制代码
namespace ClearTexts {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        public static void ClearText<T>(T t) {
            var type = t.GetType();
            if (type.GetProperty("Text") != null) {
                type.GetProperty("Text").SetValue(t, string.Empty, null);
            }
            if (type.GetProperty("Controls") != null) {
                var controls = (type.GetProperty("Controls").GetValue(t, null) as Control.ControlCollection);
                foreach (Control item in controls) {
                    ClearText(item);
                }
            }
        }

        private void button1_Click(object sender, EventArgs e) {
            ClearText(textBox3);
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
            ClearText(groupBox1);
        }
    }
}

ClearTexts.rar (47.04 KB, 下载次数: 11)



作者: Jowen    时间: 2015-6-8 22:10
xiaobo 发表于 2015-6-8 17:37
我也来玩玩,虽然与LZ不是同一个意思,不过同样是泛型的使用:[mw_shl_code=csharp,true]namespace ClearTe ...

恩,用的反射,更高级点,谢谢
作者: xiaobo    时间: 2015-6-9 08:56
Jowen 发表于 2015-6-8 22:10
恩,用的反射,更高级点,谢谢

不客气哈~其实就是为了去掉一个参数单纯的写关于Text的玩玩
作者: Jowen    时间: 2015-6-9 09:36
xiaobo 发表于 2015-6-9 08:56
不客气哈~其实就是为了去掉一个参数单纯的写关于Text的玩玩

我当时写的时候没有注意,其实可以简化的,最终版本是这样的,就一个参数
[C#] 纯文本查看 复制代码

/// <summary>
       /// 泛型清除内容.T类型注意与控件一致,例如TextBox
       /// </summary>
       /// <param name="ctrlTop">清除的控件</param>
       public static void ClearText<T>(Control ctrlTop)
       {
           if (ctrlTop.GetType()==typeof(T))
           {
               ctrlTop.Text = "";
           }
           else
           {
               foreach (Control ctrl in ctrlTop.Controls)
               {
                   ClearText<T>(ctrl); //循环调用
               }
           }
       }


作者: xiaobo    时间: 2015-6-9 22:13
Jowen 发表于 2015-6-9 09:36
我当时写的时候没有注意,其实可以简化的,最终版本是这样的,就一个参数[mw_shl_code=csharp,true]
/// ...

嗯,是的
作者: XiaoYao-70    时间: 2016-4-27 14:12
这么讲泛型头一回看到不错受教了
作者: damoson    时间: 2016-11-17 10:06
好东西,之前都是一个一个清理
作者: n091912    时间: 2019-4-7 15:45
還是看不懂怎麼用@@




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2