【问题标题】:Can I inherit a generic class from a generic type T? Like MyClass<T> : T我可以从泛型类型 T 继承泛型类吗?像 MyClass<T> :T
【发布时间】:2011-08-13 17:24:51
【问题描述】:

我想要实现的是下面这样的东西,Visual Studio 抱怨,我不知道如何实现它:

public abstract class My_BaseControl<T> : T, IRightBasedUsability
        where T : System.Web.UI.WebControls.WebControl 
{

    // Some methods that I want to have for all 
    //the extended asp.net controls along my application
    //which implements IRightBasedUsability

}

【问题讨论】:

    标签: c# .net asp.net generics inheritance


    【解决方案1】:

    你根本不能从不存在的类型继承,不;这就是您将使用您显示的代码执行的操作。

    您可以获得的最接近的方法是从您的where T 子句中的类继承。无论如何,效果不会有太大不同。

    【讨论】:

    • 基本上 T 可以是 Button 或 CheckBox 或 DropDown 等。我想添加一个功能,允许根据通过以下属性提供的一些 rightNames 启用/禁用它们:EnabledByRightName、VisibleByRightName。
    • 还尝试创建 CheckBox 和 RadioButton 的子类——不能继承按钮基类,因为那样它就不是 CheckBox 或 RadioButton,而是按钮基类。必须写两次代码——或者把它抽象成辅助方法,la脚。
    【解决方案2】:

    在这种情况下,也许 c# 扩展方法是解决您的问题的一种方法。

    @见http://msdn.microsoft.com/en-us/library/bb383977.aspx

    Eric De Carufel 写了一些关于扩展方法以及如何管理其范围的有趣文章: http://blog.decarufel.net/2009/02/extension-methods-series-managing-scope.html

    【讨论】:

    • 我喜欢这个主意!我会尽力让你知道;)谢谢!
    • +1 是的;既然我知道了pencilCake的意图,那肯定是要走的路!我喜欢扩展方法;他们可以为方法启用多重继承(但不是属性/字段)
    • 你不能用扩展方法覆盖抽象方法。所以,不幸的是,没有。
    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多