必须拥有2个不同的接口.
你会如何重构这个?
我应该重构这个代码吗?
private void CreateInstanceForProviderA()
{
a = FactorySingleton.Instance.CreateInstanceA("A");
if (a == null)
{
ShowProviderNotInstanciatedMessage();
return;
}
a.Owner = Handle.ToInt32();
lbl_Text.Text = a.Version();
}
private void CreateInstanceForProviderB()
{
b = FactorySingleton.Instance.CreateInstanceB("B");
if (b == null)
{
ShowProviderNotInstanciatedMessage();
return;
}
b.Owner = Handle.ToInt32();
lbl_Text.Text = b.Version();
}
Run Code Online (Sandbox Code Playgroud)
如果有一个通用接口,我可以写:
private void CreateInstanceForProvider(string provider)
{
p = FactorySingleton.Instance.CreateInstanceB(provider);
// p is shared over the whole class
if (p == null)
{
ShowProviderNotInstanciatedMessage();
return;
}
var tmpProvider = p as ICommonProvider;
tmpProvider .Owner = Handle.ToInt32();
lbl_Text.Text = tmpProvider .Version();
}
Run Code Online (Sandbox Code Playgroud)
嗯,要做的第一件事就是向作者大吼大叫FactorySingleton修复已经该死的代码,以便ClassA和ClassB为他们的公共字段有一个共同的接口.
在此期间,你几乎坚持使用反射,这将是丑陋的,并不值得它只是一点点.
您使用的是哪个版本的C#?
在C#4(Visual Studio 2010)中,新dynamic关键字可以帮助在这种情况下共享代码.如果这是一个性能关键的代码部分,我不会使用,但如果这只是运行了几次,那么继续.
| 归档时间: |
|
| 查看次数: |
1413 次 |
| 最近记录: |