【发布时间】:2015-02-18 06:24:48
【问题描述】:
在 Microsoft 文档中,Control 类的只读属性 Controls 的声明如下:
[BrowsableAttribute(false)]
public Control.ControlCollection Controls { get; }
我继承了这个属性。并隐藏它:
[EditorBrowsable(EditorBrowsableState.Never)]
[BrowsableAttribute(false)]
[ComVisible(false)]
public new Control.ControlCollection Controls { get; }
但这不能编译? 错误:“UserControl1.Controls.get”必须声明一个主体,因为它没有标记为抽象或外部。自动实现的属性必须同时定义 get 和 set 访问器。
所以我改了:
[EditorBrowsable(EditorBrowsableState.Never)]
[BrowsableAttribute(false)]
[ComVisible(false)]
public new Control.ControlCollection Controls {
get { return null; } }
编译。但我需要一些属性功能,而不是完全取消它。 (我必须向这篇文章的早期回复者道歉,因为我在这里进行了大量编辑。)(在 30 秒内!!)
我必须更改我的脚本...所以我尝试:
[EditorBrowsable(EditorBrowsableState.Never)]
[BrowsableAttribute(false)]
[ComVisible(false)]
public new Control.ControlCollection Controls { get; private set; }
这也不会编译:错误:“UserControl1.Controls.set”访问器的可访问性修饰符必须比属性或索引器“UserControl1.Controls”更具限制性
对此该怎么办?
【问题讨论】:
-
当您使用
new时,您并未继承该属性,而是隐藏了父级的定义。 -
第一部分你只得到了房产,那么你会得到什么回报?
-
@Pierre-LucPineault ...编辑了那个。隐藏。我想要的是隐藏。所以 { get return null; } 哪个有效。但现在是一团糟。
-
一团糟,真的很有帮助。也许你想要返回 base.Controls ?
-
@PhilipStuyck 应该这样做。感谢您恢复订单!