2013-09-30 3 views
3

У меня есть класс UserPane l: Panel. Я делаю это.C# pass property

private bool AutoSize_ = true; 
    public bool AutoSize 
    { 
     get 
     { 
      return AutoSize_; 
     } 
     set 
     { 
      AutoSize_ = value; 
     } 
    } 

Но когда я меняю Autosize_ still, возвращения всегда верны. Как правильно передать это значение.

+7

* Как правильно передать это значение. * Опубликуйте минимально воспроизводимый пример, чтобы мы могли видеть, что вы делаете неправильно. –

+1

Пожалуйста, будьте более конкретными, ваш код выглядит в порядке – Satpal

+4

Проблема заключается в том, что 'Panel' содержит определение для' AutoSize', попробуйте переопределить свойство 'public override bool AutoSize {...'. –

ответ

2

Вам необходимо переопределить свойство, поскольку оно уже определено в Panel.

public override bool AutoSize { 
     get { 
      return base.AutoSize; 
     } 
     set { 
      base.AutoSize = value; 
     } 
    } 

Разве компилятор не предупреждает вас об этом?

+1

Но в этот момент, зачем беспокоиться? Что не так с базовым свойством ... –

2

Если вы делаете что-то подобное.

public partial class myPanel : Panel 
     { 
      private bool AutoSize_ = true; 
      public bool AutoSize 
      { 
       get 
       { 
        return AutoSize_; 
       } 
       set 
       { 
        AutoSize_ = value; 
       } 
      } 
    } 

Вы скрываете Panel сек AutoSize собственность. Вы должны переопределить это свойство. Вы можете переопределить его, чтобы вернуть базовое значение (что на самом деле не так много).

public override bool AutoSize 
     { 
      get 
      { 
       return base.AutoSize; 
      } 
      set 
      { 
       base.AutoSize = value; 
      } 
     } 

Или, может быть, вы можете сделать там какую-то специальную работу.

public override bool AutoSize 
     { 
      get 
      { 
       //return custom value 
      } 
      set 
      { 
       //set some custom value 
      } 
     } 
4

Класс Panel уже имеет свойство AutoSize.
Вы определяете новое свойство с тем же именем. Проверьте предупреждения, вы должны иметь следующее:

предупреждение CS0114: шкура 'UserPanel.AutoSize' унаследовал член 'System.Windows.Forms.Panel.AutoSize. Чтобы заставить текущий элемент переопределить эту реализацию, добавьте ключевое слово переопределения. В противном случае добавьте новое ключевое слово.

Когда вы вызываете AutoSize свойство UserPanel, вы на самом деле вызывающему свойство суперкласса Panel. Поэтому ваше поле AutoSize_ никогда не будет изменено.

Закон в соответствии с предупреждением:

public class UserPanel : Panel 
{ 
    private bool AutoSize_ = true; 
    public override bool AutoSize 
    { 
     get 
     { 
      return AutoSize_; 
     } 
     set 
     { 
      AutoSize_ = value; 
     } 
    } 
} 

На стороне записки, почему вы хотите изменить уже работает AutoSize functionnality? Вы уверены, что это то, что вам нужно?

+0

+1 Для того, что я предполагаю, было создание WinFormsApplication489 и получение предупреждающего сообщения. –

1

Если у вас есть этот класс

class P : Panel 
{ 
    bool AutoSize_ = true; 
    public bool AutoSize 
    { 
     get 
     { 
      return AutoSize_; 
     } 
     set 
     { 
      AutoSize_ = value; 
     } 
    } 
} 

И затем вы создаете экземпляр и изменить значение Авторазмер так:

var p = new P(); 

p.AutoSize = true; 

Это должно работать нормально (по крайней мере, в моих тестах), проблема возникает, когда вы делаете что-то вроде этого:

var p2 = (Panel)p; 

p2.AutoSize = false; // this change the AutoSize property of the Panel not the property of the derived class P 

Если это не ваш случай, то n o что происходит.