我有一些UserControls,我想每个都有一些基本的功能。以下是我的执行情况:
public interface IMyTabInterface
{
void LoadData();
}
public partial class MyFirstTab : System.Web.UI.UserControl, IMyTabInterface
{
public void LoadData()
{
...
}
}然后,在另一页后面的代码中,我尝试:
protected void LoadFirstTab()
{
Control uControl1 = Page.LoadControl("/Controls/MyFirstTab.ascx");
Control uControl2 = Page.LoadControl("/Controls/MySecondTab.ascx");
// Want to do something like this, but don't get this far... :
var myFirstTab = (IMyTabInterface)uControl1;
var mySecondTab = (IMyTabInterface)uControl2;
myFirstTab.LoadData();
mySecondTab.LoadData();
Panel1.Controls.Add(myFirstTab);
Panel1.Controls.Add(mySecondTab);
}我知道很多这是不正确的,但是我在LoadControl()行上得到了一个错误:
这里不允许'MyFirstTab‘,因为它不扩展类'System.Web.UI.UserControl'
尽管该类明确地扩展了UserControl类。这是怎么回事?有更好的方法吗?
发布于 2011-02-04 18:22:33
这将起作用:
var myFirstTab = (IMyTabInterface)uControl1;
var mySecondTab = (IMyTabInterface)uControl2;
myFirstTab.LoadData();
mySecondTab.LoadData();
Panel1.Controls.Add((Control)myFirstTab);
Panel1.Controls.Add((Control)mySecondTab);怎么一回事?
您的myFirstTab和mySecondTab变量是IMyTabInterface类型的,因为您将它们声明为IMyTabInterface(这就是您在它们上调用LoadData的方式)。
但是,为了将一个项添加到controls集合中,这些项需要类型为Control (或从它继承的项)--这是由强制转换实现的。
另一种选择:
var myFirstTab = (IMyTabInterface)uControl1;
var mySecondTab = (IMyTabInterface)uControl2;
myFirstTab.LoadData();
mySecondTab.LoadData();
Panel1.Controls.Add(uControl1);
Panel1.Controls.Add(uControl2);在这里,您使用了最初的Control类型,因此不需要强制转换。
https://stackoverflow.com/questions/4901478
复制相似问题