gpt4 book ai didi

c# - .Net - 如何创建实现接口(interface)的 UserControl?负载控制错误

转载 作者:行者123 更新时间:2023-11-30 15:09:02 25 4
gpt4 key购买 nike

我有许多用户控件,我希望每个控件都具有一些基本功能。下面是我的实现:

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);

这是怎么回事?

您的 myFirstTabmySecondTab 变量属于 IMyTabInterface 类型,因为这是您将它们声明为的类型(这允许您调用LoadData 在他们身上)。

但是,为了向控件集合添加一项,这些项必须是 Control 类型(或继承自它的类型)- 这是通过以下方式实现的 Actor 。


另一种选择:

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

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

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

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

关于c# - .Net - 如何创建实现接口(interface)的 UserControl?负载控制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com