首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Winforms Designer调用基属性而不是“new”属性吗?

C# Winforms Designer调用基属性而不是“new”属性吗?
EN

Stack Overflow用户
提问于 2012-09-20 00:02:17
回答 3查看 488关注 0票数 2

我有一个继承自另一个类的类,这个类有一个非虚拟属性(“控件”)。

因为我不能覆盖这个属性,所以我使用了与我的属性相关的'new‘关键字。

在运行时,这个属性按照我想要的方式在正确的上下文中调用。

当我从设计器打开我的窗体时,设计器调用base.Controls而不是我的“新”控件。

我是否遗漏了什么,或者这只是winforms设计器中的不正确行为?

编辑,添加了有问题的代码以获得更多解释。我有以下类:

代码语言:javascript
复制
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中找到以下代码时:

代码语言:javascript
复制
BauerGroupBox thisBox = new BauerGroupBox()
thisBox.Controls.Add(something)

当我在我的代码中添加一个新的'BauerGroupBox‘时,它工作得很好。但是,当我在设计器中打开代码时(即使在调试devenv时),消息框不会显示,也不会命中断点。

当我运行我的应用程序时,命中了断点。

EN

Stack Overflow用户

发布于 2012-09-20 00:17:31

您误解了new关键字的工作原理。New不会覆盖该属性,它会隐藏该属性。如果你引用对象作为它的基元素,它仍然会调用基属性,而不是你的新属性。使用新版本的唯一方法是将其引用为新版本。即。

代码语言:javascript
复制
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.A1
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12498565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档