c#中的泛型类型参数约束

先以我写的一个扩展方法为例

/// <summary>
    /// 对传入的控件集合中类型为泛型参数T的控件进行操作
    /// </summary>
    /// <param name="cor">传入的控件集合</param>
    /// <param name="deal">Action类型 传入泛型T所进行的操作.该泛型类型T必须继承自System.Web.UI.Control</param>
    /// <returns>void</returns>
    public static void DealControl<T>(this  System.Web.UI.ControlCollection cor, Action<T> deal) where T : System.Web.UI.Control
    {
        foreach (System.Web.UI.Control cc in cor)
        {
            if (cc.HasControls())
            {
                DealControl(cc.Controls, deal);
            }
            else
            {
                if (cc is T)
                {
                    deal((T)cc);
                }
            }
        }
    }
//调用
this.Page.DealControl<TextBox>(new Action<TextBox>(txt => txt.Text = string.Empty));

如上面程序段所示
在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。 如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。 这些限制称为约束。 约束是使用 where 上下文关键字指定的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注