代码之家  ›  专栏  ›  技术社区  ›  zgorawski

接口中静态方法的替代方法-在ASP.NET自定义控件中强制实现类级方法

  •  0
  • zgorawski  · 技术社区  · 15 年前

    我在我的网站项目中有一个层次结构,如下所示:

    [CustomControl1 - folder]
    - CustomControl1.ascx
    - CustomControl1.css
    - CustomControl1.js
    

    我加载CSS和JS文件dynamicaly,它基于特定页面上使用的控件。我是通过使用以下代码来完成的:

    protected void Page_Load(object sender, EventArgs e)
    {
        CustomControl1.AddLinks( Page.Header);
        CustomControl2.AddLinks( Page.Header);
        ...
    }
    

    在哪里? AddLinks 方法加 HtmlLink 控件到 Page.Header 具有 href 属性设置为响应CSS和/或JS文件。

    我想添加接口 强制新控件具有AddLinks方法 但这是不可能的,因为它是一种静态方法。因为我的自定义控件继承自控件类,所以我也不能使用抽象类和/或虚拟方法。我怎样才能实现我的目标?

    注:

    我知道以前也有类似的(关于接口中静态方法的)问题发布过,但是我在那里没有找到合适的解决方案。(或者我现在还不知道这是一个正确的解决办法;-)

    1 回复  |  直到 15 年前
        1
  •  1
  •   jasper johnz    15 年前

    你不能。我可以理解为什么您希望在这里的接口上有一个静态方法来实现您的模式,但是C不允许在接口上有静态方法,所以您的方法在这里是死胡同。

    假设您不想出于某种原因对控件的一个实例调用一个方法,那么您要么要确保实现所有静态方法,要么使用反射(臭)等。

    为什么你不能只用

    
     myCustomControl1Instance.AddLinks(Page.Header);
     myCustomControl2Instance.AddLinks(Page.Header);
    
    

    另外,就个人而言,我认为控件应该足够智能,以便在需要时添加链接。 Page.ClientScript 包含执行此操作的方法。