用户控制开关
本文关键字:开关 控制 用户 | 更新日期: 2023-09-27 18:35:19
有两个不同的用户控件共享一些共同的属性。我想做的是根据外部标志在这两者之间切换。
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);
由于用户控件没有名为"SelectedItemName"的属性,因此代码不会引发错误。
我目前所做的是,我在UserControl上添加了一个扩展方法,该方法使用反射获取"SelectedItemName",并通过调用u1来获取值。SelectedItemName() 而不是 u1。选定项名称;
我的问题是,在不使用扩展/也许正确的方法的情况下解决此问题的简单方法是什么。请注意,我不想在 if 语句中重复 SomeMethod(a,b)。
我的建议是让这两个UserControl
类都实现共享接口或从共享基类派生。 然后,您可以针对基类或接口进行开发,而不必担心标志/开关。
IYourUserControl u1, u2;
SomeMethod(u1, u2);
如果将SomeMethod定义为:
void SomeMethod(IYourUserControl one, IYourUserControl two) { // ...
试试这个不是:
UserControl u1, u2;
if(flag)
{
u1 = u1 as ControlType1;
u2 = u2 as ControlType1;
SomeMethod((u1 as ControlType1).SelectedItemName, (u2 as ControlType1).SelectedItemName);
}
else
{
u1 = u1 as ControlType2;
u2 = u2 as ControlType2;
SomeMethod((u1 as ControlType2).SelectedItemName, (u2 as ControlType2).SelectedItemName);
}
或者,如果创建一个包含SelectedItemName
以及从ControlType1
和ControlType2
扩展的BaseControlType
,则可以执行以下操作:
UserControl u1, u2;
if(flag)
{
u1 = u1 as ControlType1;
u2 = u2 as ControlType1;
}
else
{
u1 = u1 as ControlType2;
u2 = u2 as ControlType2;
}
SomeMethod((u1 as BaseControlType).SelectedItemName, (u2 as BaseControlType).SelectedItemName);