как сделать предварительно установленное публичное свойство приватным при создании пользовательского элемента управления - PullRequest
0 голосов
/ 03 февраля 2010

Я создаю собственный MaskedTextBox только для даты. Теперь я хочу скрыть свойство Mask MaskedTextBox от своих пользователей.

EDIT:

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 ]

4 голосов
/ 03 февраля 2010

Вы не можете полностью удалить его, не нарушив принципала подстановки Лискова ; но вы можете повторно объявить его и скрыть (либо сделать его недоступным для просмотра, либо сделать настройщик закрытым).

Но ИМО это плохая идея; упаковка управления будет чище.

Обратите внимание, что скрытия членов можно легко избежать (даже не осознавая), просто применив базовый тип.

3 голосов
/ 03 февраля 2010
 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' не может использоваться в этом контексте, потому что набор доступа недоступен C: \ @ Dev \ ScratchPad \ ScratchPad \ ScratchPad \ Form1.cs 33 13 ScratchPad

1 голос
/ 03 февраля 2010

Скопируйте и вставьте это в свой класс:

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new string Mask {
    get { return base.Mask; }
    set { base.Mask = value; }
}

Атрибут [Browsable] скрывает свойство в окне свойств. Атрибут [EditorBrowsable] скрывает его от IntelliSense.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...