作者: Jowen
查看: 8210|回复: 14
打印 上一主题 下一主题

[教程] 【C#泛型的好处】举个最简单例子说明吧

[复制链接]
跳转到指定楼层
楼主
Jowen 发表于 2015-5-22 14:35:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
查看: 8210|回复: 14
说明:
来这个论坛有些日子了,很少看到有关泛型的例子,我发个简单的希望可以让有兴趣的人重视起来。我发的这个代码虽然简单,但是主要是抛砖引玉作用。引言:你每次清空控件数据时还在一个一个控件.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);//清除下拉框


评分

参与人数 4金钱 +6 收起 理由
889966 + 1 感谢分享,LZ辛苦了~
zakailynn + 1 感谢分享,LZ辛苦了~
mumupudding + 1 赞一个!
乔克斯 + 3 感谢LZ对论坛做出的贡献~

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 转播转播
回复 论坛版权

使用道具 举报

来自 11#
 楼主| Jowen 发表于 2015-6-9 09:36:07 | 只看该作者
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); //循环调用
               }
           }
       }

15#
n091912 发表于 2019-4-7 15:45:39 | 只看该作者
還是看不懂怎麼用@@
14#
damoson 发表于 2016-11-17 10:06:31 | 只看该作者
好东西,之前都是一个一个清理
13#
XiaoYao-70 发表于 2016-4-27 14:12:34 | 只看该作者
这么讲泛型头一回看到不错受教了
12#
xiaobo 发表于 2015-6-9 22:13:36 | 只看该作者
Jowen 发表于 2015-6-9 09:36
我当时写的时候没有注意,其实可以简化的,最终版本是这样的,就一个参数[mw_shl_code=csharp,true]
/// ...

嗯,是的
10#
xiaobo 发表于 2015-6-9 08:56:52 | 只看该作者
Jowen 发表于 2015-6-8 22:10
恩,用的反射,更高级点,谢谢

不客气哈~其实就是为了去掉一个参数单纯的写关于Text的玩玩
9#
 楼主| Jowen 发表于 2015-6-8 22:10:37 | 只看该作者
xiaobo 发表于 2015-6-8 17:37
我也来玩玩,虽然与LZ不是同一个意思,不过同样是泛型的使用:[mw_shl_code=csharp,true]namespace ClearTe ...

恩,用的反射,更高级点,谢谢
8#
xiaobo 发表于 2015-6-8 17:37:07 | 只看该作者
我也来玩玩,虽然与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)


7#
fessicon 发表于 2015-5-23 13:25:18 | 只看该作者
简单,但很实用,感谢分享
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-5-5 15:54, Processed in 0.646243 second(s), 36 queries , Gzip On.

快速回复 返回顶部 返回列表