2010-10-28 50 views
0

我有一个层次结构,下面我的网站项目:替代在接口的静态方法 - 强制在asp.net定制实现类级别的方法来控制

[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.Headerhref属性设置为coresponding css和/或js文件。

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

注:

我知道,类似的问题(在接口有关的静态方法)是在此之前发布的,但我没有找到妥善的解决办法在那里。 (或者我太noobish知道这是一个妥善的解决办法;-)

回答

1

你不能。我可以准确地看到为什么你希望在这里的接口上有一个静态方法来实现你的模式,但是c#不允许在接口上使用静态方法,所以你在这里死路一条。

假设你不想只是调用一个方法对你的控制出于某种原因的情况下,你停留在任一确保您实现您所有的静态方法,使用反射(臭)等

为什么不能你只需使用

 

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

也,我个人认为,控制应该足够聪明添加链接,如果它需要他们。 Page.ClientScript包含这样做的方法。

+0

我不想因为我的UpdatePanel添加它们不完全回发,用户请求的任何后使用'controlInstance.Method()'模式。所以我知道页面上可以使用哪些控件,但我不知道何时何地。但是我会看看上面提到的'Page.ClientScript',谢谢! – zgorawski 2010-10-28 10:25:10

+0

Bah,'Page.ClientScript'将帮助我管理.js文件,但没有.css,因为我无法以简单的,兼容xhtml的方式添加它们。 – zgorawski 2010-10-29 06:36:22