有两个不同的 UserControl,它们共享一些公共(public)属性。
我想做的是根据外部标志在这两者之间切换。

UserControl u1, u2;

if(flag)
{
    u1 = u1 as ControlType1;
    u2 = u2 as ControlType1;
}
else
{
    u1 = u1 as ControlType2;
    u2 = u2 as ControlType2;
}

SomeMethod(u1.SelectedItemName, u2.SelectedItemName);

由于 UserControl 没有名为“SelectedItemName”的属性,因此代码不会抛出错误。

我目前所做的是,我在 UserControl 上添加了一个扩展方法,它使用反射获取“SelectedItemName”,并通过调用 u1.SelectedItemName() 而不是 u1.SelectedItemName 来获取值;

我的问题是有什么简单的方法可以在不使用扩展的情况下解决这个问题/也许是正确的方法。请注意,我不想在 if 语句中重复 SomeMethod(a,b)。

最佳答案

我的建议是让这两个 UserControl 类实现共享接口(interface)或从共享基类派生。然后,您可以针对基类或接口(interface)进行开发,而无需担心标志/开关。

IYourUserControl u1, u2;

SomeMethod(u1, u2);

如果 SomeMethod 定义为:
void SomeMethod(IYourUserControl one, IYourUserControl two) { // ...

关于c# - 用户控制开关,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10726695/

10-11 20:55