我有一个带有面板的ASP.NET用户控件,用于隐藏和显示内容,也就是说,
<asp:Panel runat="server" ID=pnlContainer">
<!-- Some fairly uninteresting content -->
</asp:Panel>
我有一个可见的属性作为覆盖,也就是说,
public override bool Visible
{
get { return pnlContainer.Visible; }
set { pnlContainer.Visible = value; }
}
当我设置它时,我得到一个堆栈溢出异常但是当我将关键字更改为时new
,即,
public new bool Visible
{
get { return pnlContainer.Visible; }
set { pnlContainer.Visible = value; }
}
一切正常。为什么是这样?我想我对这些关键字的理解通常很差,它在这里显示。
还:
如果我没有放任何关键字 - Visual Studio 会发出警告说应该使用new
或override
关键字,因为我正在屏蔽用户控件上已经存在的成员。
在某种程度上,我使用面板来控制用户控件上的可见性的奇怪做法不是这里的问题。在贡献者的帮助下,这显然很疯狂,不应该这样做。但让我感兴趣的问题是override
andnew
关键字的行为方式如此不同,以及这样做的原因。