我有一个继承自另一个类的类,这个类有一个非虚拟属性(“控件”)。
因为我不能覆盖这个属性,所以我使用了与我的属性相关的'new‘关键字。
在运行时,这个属性按照我想要的方式在正确的上下文中调用。
当我从设计器打开我的窗体时,设计器调用base.Controls而不是我的“新”控件。
我是否遗漏了什么,或者这只是winforms设计器中的不正确行为?
编辑,添加了有问题的代码以获得更多解释。我有以下类:
public partial class BauerGroupBox : ComponentFactory.Krypton.Toolkit.KryptonGroupBox
{
public BauerGroupBox()
: base()
{
}
public new Control.ControlCollection Controls
{
get
{
MessageBox.Show("GOT THERE");
return this.Panel.Controls;
}
}
}当我在intializecomponent中找到以下代码时:
BauerGroupBox thisBox = new BauerGroupBox()
thisBox.Controls.Add(something)当我在我的代码中添加一个新的'BauerGroupBox‘时,它工作得很好。但是,当我在设计器中打开代码时(即使在调试devenv时),消息框不会显示,也不会命中断点。
当我运行我的应用程序时,命中了断点。
发布于 2012-09-20 00:17:31
您误解了new关键字的工作原理。New不会覆盖该属性,它会隐藏该属性。如果你引用对象作为它的基元素,它仍然会调用基属性,而不是你的新属性。使用新版本的唯一方法是将其引用为新版本。即。
public class A {
public A1 {get;set;}
}
public class B : A {
public new A1 {get;set;}
}
B b = new B();
A a = b;
a.A1; // references A.A1
b.A1; // references B.A1https://stackoverflow.com/questions/12498565
复制相似问题