首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net --如何创建实现接口的UserControl?LoadControl错误

.Net --如何创建实现接口的UserControl?LoadControl错误
EN

Stack Overflow用户
提问于 2011-02-04 18:18:26
回答 1查看 12.9K关注 0票数 4

我有一些UserControls,我想每个都有一些基本的功能。以下是我的执行情况:

代码语言:javascript
复制
public interface IMyTabInterface
{
    void LoadData();
}

public partial class MyFirstTab : System.Web.UI.UserControl, IMyTabInterface
{
    public void LoadData()
    {
        ...
    }

}

然后,在另一页后面的代码中,我尝试:

代码语言:javascript
复制
    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类。这是怎么回事?有更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-04 18:22:33

这将起作用:

代码语言:javascript
复制
var myFirstTab = (IMyTabInterface)uControl1;
var mySecondTab = (IMyTabInterface)uControl2;

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

Panel1.Controls.Add((Control)myFirstTab);
Panel1.Controls.Add((Control)mySecondTab);

怎么一回事?

您的myFirstTabmySecondTab变量是IMyTabInterface类型的,因为您将它们声明为IMyTabInterface(这就是您在它们上调用LoadData的方式)。

但是,为了将一个项添加到controls集合中,这些项需要类型为Control (或从它继承的项)--这是由强制转换实现的。

另一种选择:

代码语言:javascript
复制
var myFirstTab = (IMyTabInterface)uControl1;
var mySecondTab = (IMyTabInterface)uControl2;

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

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

在这里,您使用了最初的Control类型,因此不需要强制转换。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4901478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档