2015-08-26 2 views
0

У меня есть два общедоступных свойства в классе. Бизнес-требование - это одно свойство, чтобы быть именно копией другого.Публичные свойства в классе

Как я могу присвоить одно из свойств другому? Я хочу, чтобы ProductNumebr был таким же, как SKU.

private string _sku; 
public string Sku 
{ 
      get 
      { 
       return _sku; 
      } 
      set 
      { 
       this._sku = value; 
      } 
} 

private string _productNumber;  
public string ProductNumber 
{ 
      get 
      { 
       return _sku ?? string.Empty; 
      } 
      set 
      { 
       this._productNumber = Sku; 
      } 
    } 
+0

Вы можете использовать ту же область подложки в оба свойства, Если '_productNumber' не используется внутри кода для установки значений. Бизнес-требование, о котором вы говорили, просто недостаточно, чтобы обеспечить хорошее логическое предложение. – vendettamit

+0

ProductNumber был использован в приложении, но новое требование не касается кода в пункте пользовательского интерфейса ProductNumber для SKU. – arlen

+1

На каком языке это? Добавьте соответствующий тег. – Dukeling

ответ

2

Ну, это полностью зависит от использования нового свойства SKU. Независимо от того, хотите ли вы синхронизировать эти два свойства (что, я думаю, должно быть), или SKU должен быть доступен только для чтения и использоваться только для получения ProductNumber.

Вы можете просто использовать одно поле поддержки для обоих свойств.

string _productNumber; 

public string Sku 
{ 
      get 
      { 
       return _productNumber; 
      } 
      set 
      { 
       this._productNumber= value; 
      } 
} 

public string ProductNumber 
{ 
      get 
      { 
       return _productNumber; 
      } 
      set 
      { 
       this._productNumber= value; 
      } 
    } 

Это может быть Hacky решением, но таким образом, вы можете держать Чтение и запись в синхронизации на дублирующих свойствах объекта в однотридовой среды.

+1

Я не думаю, что это решение _hacky_ вообще - это _the_ решение (учитывая то, что мы знаем), где Sku является просто псевдонимом ProductNumber. Или, альтернативно, данное _ «новое требование не касается кода в пункте UI ProductNumber для SKU» _ превратите его, так что ProductNumber является псевдонимом для Sku. –

+0

После этого изменения, когда я запускаю следующий запрос, ProductNumebr все еще указывает на ProductNumber, а не SKU. – arlen

+0

продукты = (от р в this._productRepository.Table OrderBy p.Id где p.Deleted && p.ProductNumber.Contains ("K01") выберите р!) .ToList(); – arlen

0

, если я правильно понимаю, вы имеете в виду, есть интеграция, которая принимает объект таблицы, который имеет идентификатор и ProductNumber fileds и его источник закрыт, но вы знаете, он просто устанавливает значение поля СКА и таблица исходных объектов закрывается слишком так вы можете просто создать объект таблицы и передать ее интеграции.

но в этой процедуре ProductNumebr не будет установлен. поэтому вы хотите имитировать ски, а затем установить ProductNumebr в соответствии с sku.

я думаю, если я понимаю, что вы имеете в виду правильно, вы должны использовать полиморфизм справиться с этой ситуацией, создать объект мимических и передать его интеграции:

class mimic:(the table class name) 
{ 
    (the table class name) tbl = new (the table class name)() ; 
    new public string sku 
    { 
     get 
     { 
     return tbl.sku ; 
     } 
     set 
     { 
     tbl.sku = value ; 
     tbl.ProductNumber = value ?? string.Empty ; 
     } 
    } 

    new public string ProductNumber 
    { 
     get 
     { 
     return tbl.ProductNumber ; 
     } 
     //no need to set because as you said it wont set the productNumber 
    } 

    //get the origin table object and set it to its right place for further processes 

    public (the table class name) getTheOrigin() 
    { 
     return this.tbl 
    } 
} 
Смежные вопросы