3

我有一堂课UserPane l: Panel。我这样做。

 private bool AutoSize_ = true;
    public bool AutoSize
    {
        get
        {
            return AutoSize_;
        }
        set
        {
            AutoSize_ = value;
        }
    }

但是当我改变Autosize_ still回报总是真实的。如何正确传输该值。

4

4 回答 4

4

Panel 类已经有一个属性AutoSize
您定义一个具有相同名称的新属性。检查您的警告,您必须具备以下条件:

警告 CS0114:“UserPanel.AutoSize”隐藏了继承的成员“System.Windows.Forms.Panel.AutoSize”。要使当前成员覆盖该实现,请添加 override 关键字。否则添加新关键字。

当您调用 的AutoSize属性时UserPanel,实际上是在调用超类的属性Panel。所以你的领域AutoSize_永远不会改变。

根据警告采取行动:

public class UserPanel : Panel
{
    private bool AutoSize_ = true;
    public override bool AutoSize
    {
        get
        {
            return AutoSize_;
        }
        set
        {
            AutoSize_ = value;
        }
    }
}

附带说明一下,为什么要更改已经工作的 AutoSize 功能?你确定这是你需要的吗?

于 2013-09-30T08:41:36.943 回答
2

您需要覆盖该属性,因为它已经在Panel.

    public override bool AutoSize {
       get {
          return base.AutoSize;
       }
       set {
          base.AutoSize = value;
       }
    }

编译器不是给你警告吗?

于 2013-09-30T08:40:09.950 回答
2

如果你正在做这样的事情。

 public partial class myPanel : Panel
        {
            private bool AutoSize_ = true;
            public bool AutoSize
            {
                get
                {
                    return AutoSize_;
                }
                set
                {
                    AutoSize_ = value;
                }
            }
    }

你隐藏了财产PanelAutoSize您应该覆盖此属性。您可以覆盖它以返回基值(实际上并没有多大作用)。

public override bool AutoSize
        {
            get
            {
                return base.AutoSize;
            }
            set
            {
                base.AutoSize = value;
            }
        }

或者也许你可以在那里做一些定制的工作。

public override bool AutoSize
        {
            get
            {
                //return custom value
            }
            set
            {
                //set some custom value
            }
        }
于 2013-09-30T08:41:17.887 回答
1

如果你有那门课

class P : Panel
{
    bool AutoSize_ = true;
    public bool AutoSize
    {
        get
        {
            return AutoSize_;
        }
        set
        {
            AutoSize_ = value;
        }
    }
}

然后创建一个实例并像这样更改 AutoSize 的值:

var p = new P();

p.AutoSize = true;

这应该可以正常工作(至少在我的测试中),当您执行以下操作时会出现问题:

var p2 = (Panel)p;

p2.AutoSize = false; // this change the AutoSize property of the Panel not the property of the derived class P

如果这不是你的情况,那么不知道会发生什么。

于 2013-09-30T09:06:48.910 回答