1

my のコンストラクターが(HTML から)WebControlの値にアクセスできるようにします。IsSpecialただし、常にfalseです。コンストラクターメソッドが終了するまで値を読み取らfalseないため、コンストラクターにあると思います。IsSpecialコンストラクターでの正しい値を知る方法はありますか?

C#:

[DefaultProperty("Text")]
[ToolboxData("<{0}:WebControlExample runat=server></{0}:WebControlExample>")]
public class WebControlExample: WebControl, INamingContainer
{
    private readonly int[] goodies;

    public WebControlExample()
    {
        if (this.isSpecial)
        {
            goodies = new int[24];
        }
        else
        {
            //always reaches here
            goodies = new int[48];
        }
    }

    private bool isSpecial= false;
    public bool IsSpecial
    {
        set
        {
            this.isSpecial= value;
        }
    }
}

HTML:

<xyz:WebControlExamplerunat="server" id="webControlExample" IsSpecial="true" />
4

2 に答える 2

1

プロパティのマークアップに入力された値はIsSpecial、コンストラクターが実行されるまでプロパティに割り当てられません。考えてみてください..次のようなコードを期待しています:

WebControlExample webControlExample = null;
webControlExample.IsSpecial = true;
webControlExample = new WebControlExample();

実際に何が起こっているか (単純化されています!) は次のとおりです。

WebControlExample webControlExample = null;
webControlExample = new WebControlExample();
webControlExample.IsSpecial = true;

コンストラクターでこれに影響を与える方法はありません。おそらく、WebControl のコンストラクターで多くのことを行うべきではありません。

于 2015-04-01T14:43:39.350 に答える