语言:C#主题:扩展控件.
我有一个用户控件B,它有一个字段F,它是一个显示图像的控件.
我有第二个用户控件X,它扩展了B.它使用了基础F,但它有自己的实现(显示特定于X的按钮等).
X和B都在不同的项目中找到,B不是抽象的; 这是一个具体的实施.
问题:当创建X时,调用第一个B的构造函数,其中它初始化F.在调用B的构造函数之后,执行它自己的构造函数,其中它将F设置为其他东西.
这是不可取的:
1)F的两个实例存在而X应该使用新的F,它似乎在显示图像时引用基数F.
解决方法:
1)在X中,在替换FI之前可以处理base.F - 或
2)在B中,我可以测试类类型:如果type是X则跳过F的初始化.
虽然我可以使用这些变通办法中的任何一种,但有些东西告诉我存在更好的架构.但是什么?
尝试延迟初始化:
public class B
{
private F f;
public F F
{
get { return f ?? (f = InitializeF()); }
set { f = value; }
}
protected virtual F InitializeF()
{
return new F();
}
}
public class X : B
{
protected override F InitializeF()
{
return new SomeOtherF();
}
}
Run Code Online (Sandbox Code Playgroud)