如何在创建自定义控件时将预设公共属性设置为private

时间:2010-02-02 21:28:10

标签: c# oop inheritance custom-controls

我正在为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
        }
   }

我该怎么做才能让任何人都无法设置此属性

3 个答案:

答案 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中。