有两种不同的UserControl共享一些常见的属性.我想做的是根据外部标志在这两者之间切换.
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);
Run Code Online (Sandbox Code Playgroud)
由于UserControl没有名为"SelectedItemName"的属性,因此代码不会抛出错误.
我已经做过目前是,我已经添加上用户控件的扩展方法,其得到"SelectedItemName"使用反射,我也得到通过调用u1.SelectedItemName(值),而不是u1.SelectedItemName;
我的问题是什么是一种简单的方法来解决这个问题,而不使用扩展/也许是正确的方法.请注意,我不想在if语句中重复SomeMethod(a,b).
我的建议是使这两个UserControl类实现共享接口或从共享基类派生.然后,您可以针对基类或接口进行开发,而无需担心标志/开关.
IYourUserControl u1, u2;
SomeMethod(u1, u2);
Run Code Online (Sandbox Code Playgroud)
如果将SomeMethod定义为:
void SomeMethod(IYourUserControl one, IYourUserControl two) { // ...
Run Code Online (Sandbox Code Playgroud)