C# .Net-如何创建实现接口的UserControl?加载控制错误

C# .Net-如何创建实现接口的UserControl?加载控制错误,c#,.net,inheritance,user-controls,C#,.net,Inheritance,User Controls,我有很多用户控件,我希望每个控件都有一些基本功能。以下是我的实施: public interface IMyTabInterface { void LoadData(); } public partial class MyFirstTab : System.Web.UI.UserControl, IMyTabInterface { public void LoadData() { ... } } 然后,在另一页的代码隐藏中,我尝试:

我有很多用户控件,我希望每个控件都有一些基本功能。以下是我的实施:

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类。这是怎么回事?有更好的方法吗?

这样可以:

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
类型,因为这是您声明的变量(这允许您对它们调用
LoadData

但是,要将项添加到控件集合中,这些项的类型必须是
控件
(或继承自它的项)-这是通过强制转换实现的


另一种选择:

var myFirstTab = (IMyTabInterface)uControl1;
var mySecondTab = (IMyTabInterface)uControl2;

myFirstTab.LoadData();
mySecondTab.LoadData();

Panel1.Controls.Add(uControl1);
Panel1.Controls.Add(uControl2);

这里您使用的是您开始使用的原始
控件
类型,因此无需强制转换。

您好,谢谢您的回复。我完全犯了一个愚蠢的错误,应该删除这个问题-我更改了控件上的名称空间,这就是LoadControl()函数崩溃的原因。啊!只有在我放弃了所有接口代码重新开始后,才意识到这一点,但仍然会出现相同的错误。呜呜声。