C# 决定在运行时使用的用户控件

C# 决定在运行时使用的用户控件,c#,asp.net,C#,Asp.net,我在一个页面上定义了2个用户控件: <%@ Register Src="Foo.ascx" TagName="FooControl" TagPrefix="acme" %> <%@ Register Src="Bar.ascx" TagName="BarControl" TagPrefix="acme" %> . . . <acme:FooControl ID="myFoo" runat="server" Visible="false" /> <acme

我在一个页面上定义了2个用户控件:

<%@ Register Src="Foo.ascx" TagName="FooControl" TagPrefix="acme" %>
<%@ Register Src="Bar.ascx" TagName="BarControl" TagPrefix="acme" %>
.
.
.
<acme:FooControl ID="myFoo" runat="server" Visible="false" />
<acme:BarControl ID="myBar" runat="server" Visible="false" />

我知道我可以让两个用户控件从一个公共界面继承,但是还有其他(可能更好的)方法吗?

编辑:我刚刚意识到我的大部分答案已经包含在对同一问题的评论中。向发表评论的人道歉,我不是故意“窃取”你的内容…:)

不,我可以想出不同的方法来实现相同的结果(通过反射调用属性或使用解决方案),但是我想不出比让两个控件实现相同的接口更好的方法

然后,您可以通过另一个属性访问活动控件,例如:

public IMyControl ActiveControl 
{
  get 
  {
    return (isSomeCondition)? myFoo : myBar; 
  }
}

而且,不,我还没有找到比使用公共接口更好的方法。据我记忆所及,第二个最佳选择是您正在使用的。我想您可以使用反射来设置属性,但我真的不建议这样做。你会失去类型安全。公共接口是我的选择。你不喜欢的解决方案是什么?更多的是好奇。感谢您指出CodeReview——直到您发布链接,我才注意到它的存在:)
public IMyControl ActiveControl 
{
  get 
  {
    return (isSomeCondition)? myFoo : myBar; 
  }
}