如何隐藏 ASP.NET 自定义控件的继承属性?
How can I hide inherited properties of an ASP.NET custom control?
这是我第一次创建自定义控件的经历。我的真实示例要大得多,但为了清楚起见,将其简化。最终,我需要尽可能多地隐藏自定义控件的属性,这样当我与团队的其他成员共享我的新控件时,他们只需担心需要的几个属性。
我有一个名为 TimeNow 的控件,它继承了 System.Web.UI.WebControls.Literal
,基本上只是在网页上打印当前时间:
public class TimeNow : Literal
// Set to private so Text is hidden from the editor.
private string Text
{
get;
set;
}
protected override void Render(HtmlTextWriter writer)
{
// Get and write the time of now.
}
这个有效,但看起来很笨重。当我将控件放在网页上时,我不再在智能感知中看到可用的文本,但我确实收到一条警告,提示我的文本隐藏了继承的文本。有没有更好的方法来隐藏文本 属性?
试试这个:
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
private string Text
{
}
该警告消息应该有更多信息,建议您使用 new
关键字,如果您 确实 打算隐藏继承的成员,请按其说明操作:
public class TimeNow : Literal
{
new private string Text
{
get;
set;
}
}
如果你从一个行为类似于 ITextControl
的 Literal
派生(Literal 已经实现了这个接口)然后你尝试删除基本的文本 属性?这就像派生自 cat 但不想让它们做 "meow" 并迫使它们像鸭子一样飞翔。我认为您正在搜索动物 class。
我不太了解 ASP.NET(仅适用于桌面的 .Net)。也许可以使用组合而不是继承(如果你真的不需要文字 -> "Cat"),你可以从 System.Web.UI.Control
(-> "Animal")继承。
public class TimeNow : System.Web.UI.Control
{
// no need to do something here with the Text property, is not defined
}
或组合
public class TimeNow : System.Web.UI.Control
{
private readonly Literal literal;
public TimeNow()
{
this.literal = new Literal();
// ... and set the Text etc., no one else can access
}
// or something like this
public TimeNow(ILiteralFactory literalFactory)
{
// the factory is just an example... don't know your context but this way your newly created literal can't be accessed
this.literal = literalFactory.CreateNewLiteral();
// do what you want with the text control, e.g. store internally
// Clone() the Literal etc.
// the
}
}
更新: 快速浏览了 MSDN,也许 Content Control 是您要找的东西,而不是文字。 (抱歉,写错了桌面应用)
这是我第一次创建自定义控件的经历。我的真实示例要大得多,但为了清楚起见,将其简化。最终,我需要尽可能多地隐藏自定义控件的属性,这样当我与团队的其他成员共享我的新控件时,他们只需担心需要的几个属性。
我有一个名为 TimeNow 的控件,它继承了 System.Web.UI.WebControls.Literal
,基本上只是在网页上打印当前时间:
public class TimeNow : Literal
// Set to private so Text is hidden from the editor.
private string Text
{
get;
set;
}
protected override void Render(HtmlTextWriter writer)
{
// Get and write the time of now.
}
这个有效,但看起来很笨重。当我将控件放在网页上时,我不再在智能感知中看到可用的文本,但我确实收到一条警告,提示我的文本隐藏了继承的文本。有没有更好的方法来隐藏文本 属性?
试试这个:
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
private string Text
{
}
该警告消息应该有更多信息,建议您使用 new
关键字,如果您 确实 打算隐藏继承的成员,请按其说明操作:
public class TimeNow : Literal
{
new private string Text
{
get;
set;
}
}
如果你从一个行为类似于 ITextControl
的 Literal
派生(Literal 已经实现了这个接口)然后你尝试删除基本的文本 属性?这就像派生自 cat 但不想让它们做 "meow" 并迫使它们像鸭子一样飞翔。我认为您正在搜索动物 class。
我不太了解 ASP.NET(仅适用于桌面的 .Net)。也许可以使用组合而不是继承(如果你真的不需要文字 -> "Cat"),你可以从 System.Web.UI.Control
(-> "Animal")继承。
public class TimeNow : System.Web.UI.Control
{
// no need to do something here with the Text property, is not defined
}
或组合
public class TimeNow : System.Web.UI.Control
{
private readonly Literal literal;
public TimeNow()
{
this.literal = new Literal();
// ... and set the Text etc., no one else can access
}
// or something like this
public TimeNow(ILiteralFactory literalFactory)
{
// the factory is just an example... don't know your context but this way your newly created literal can't be accessed
this.literal = literalFactory.CreateNewLiteral();
// do what you want with the text control, e.g. store internally
// Clone() the Literal etc.
// the
}
}
更新: 快速浏览了 MSDN,也许 Content Control 是您要找的东西,而不是文字。 (抱歉,写错了桌面应用)