我正在为Date创建自定义MaskedTextBox。现在我想从其用户隐藏MaskedTextBox的Mask属性。
修改
public class CustomDateMask:System.Windows.Forms.MaskedTextBox
{
public new string Mask
{
get;
private set;
}
public CustomDateMask()
{
this.Mask = @"00/00/2\000"; // this property should not be set by any one now
this.ValidatingType = typeof(System.DateTime); // this property should not be set by any one now
}
}
我该怎么做才能让任何人都无法设置此属性
答案 0 :(得分:4)
如果不打破Liskov substitution principal,则无法将其完全删除;但是你可以重新声明它并隐藏它(要么使它不可浏览,要么将setter设为私有)。
但IMO这是一个坏主意;包裹控件会更干净。
请注意,只需通过强制转换为基类,就可以轻松避免成员隐藏(甚至没有实现)。
答案 1 :(得分:3)
public class Test : System.Windows.Forms.TextBox
{
public new string Text
{
get { return base.Text; }
private set { base.Text = value; }
}
public Test()
{
base.Text = "hello";
}
}
Test test = new Test(); // Create an instance of it
string text = test.Text;
text.Text = "hello world"; // comp error
错误详细信息:
错误1属性或索引器'ScratchPad.Test.Text'不能在此上下文中使用,因为set访问器不可访问C:\ @Dev \ ScratchPad \ ScratchPad \ ScratchPad \ Form1.cs 33 13 ScratchPad
答案 2 :(得分:1)
将其复制并粘贴到您的班级中:
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new string Mask {
get { return base.Mask; }
set { base.Mask = value; }
}
[Browsable]属性在“属性”窗口中隐藏该属性。 [EditorBrowsable]属性将其隐藏在IntelliSense中。