WebControl 的构造函数没有正确的属性值
WebControl's constructor does not have correct attribute value
我希望 WebControl
的构造函数能够访问 IsSpecial
的值(来自 HTML)。但是,它总是 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" />
在 IsSpecial
属性 的标记中输入的值不会分配给 属性,直到构造函数 运行 之后。想一想,.. 您期望的代码等同于以下内容:
WebControlExample webControlExample = null;
webControlExample.IsSpecial = true;
webControlExample = new WebControlExample();
实际发生的事情(简化!)是:
WebControlExample webControlExample = null;
webControlExample = new WebControlExample();
webControlExample.IsSpecial = true;
没有办法影响构造函数的这一点,而且您可能不应该在 WebControl 的构造函数中做太多的事情。
这不是一个很好的解决方案,但是如果您有一个只读数组,您可以有两个个只读数组和将它们包装在访问器中:
[DefaultProperty("Text")]
[ToolboxData("<{0}:WebControlExample runat=server></{0}:WebControlExample>")]
public class WebControlExample: WebControl, INamingContainer
{
private readonly int[] goodies = new int[48];
private readonly int[] goodiesSpecial = new int[24];
private bool isSpecial= false;
public bool IsSpecial
{
set
{
this.isSpecial= value;
}
}
private int[] Goodies
{
get {return isSpecial ? goodiesSpecial : goodies;}
}
}
但是你没有说明 1. 为什么你需要两个不同大小的数组或 2. 你用它们做什么。
我希望 WebControl
的构造函数能够访问 IsSpecial
的值(来自 HTML)。但是,它总是 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" />
在 IsSpecial
属性 的标记中输入的值不会分配给 属性,直到构造函数 运行 之后。想一想,.. 您期望的代码等同于以下内容:
WebControlExample webControlExample = null;
webControlExample.IsSpecial = true;
webControlExample = new WebControlExample();
实际发生的事情(简化!)是:
WebControlExample webControlExample = null;
webControlExample = new WebControlExample();
webControlExample.IsSpecial = true;
没有办法影响构造函数的这一点,而且您可能不应该在 WebControl 的构造函数中做太多的事情。
这不是一个很好的解决方案,但是如果您有一个只读数组,您可以有两个个只读数组和将它们包装在访问器中:
[DefaultProperty("Text")]
[ToolboxData("<{0}:WebControlExample runat=server></{0}:WebControlExample>")]
public class WebControlExample: WebControl, INamingContainer
{
private readonly int[] goodies = new int[48];
private readonly int[] goodiesSpecial = new int[24];
private bool isSpecial= false;
public bool IsSpecial
{
set
{
this.isSpecial= value;
}
}
private int[] Goodies
{
get {return isSpecial ? goodiesSpecial : goodies;}
}
}
但是你没有说明 1. 为什么你需要两个不同大小的数组或 2. 你用它们做什么。