3

クラスがありUserPane l: Panelます。私はそうします。

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

しかし、私が変更すると、Autosize_ still戻り値は常に true になります。その値を正しく送信する方法。

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;
                }
            }
    }

Panelあなたはsの財産を隠していAutoSizeます。このプロパティをオーバーライドする必要があります。それをオーバーライドして、基本値を返すことができます (実際にはあまり効果がありません)。

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 に答える