2015-02-02 1 views
0

У меня есть базовая страница для формы заказа. Внутри этой базовой страницы есть несколько свойств, которые являются абстрактными. Они переоцениваются в классе детей. Одно свойство, в частности, называется CompanyName. Это строка. В дочернем классе я добавил код, который вытаскивает CompanyName из коллекции CompanyNames. Так как свойство overriden получает имя CompanyName, может ли родительский класс получить доступ к значению, полученному с помощью версии класса этого метода?В C#, свойство overriden возвращает сохраненное значение родительскому классу?

Вот отрывок из моего родительского класса с именем OrderFormBasePage:

protected string GetNextInvoiceNumber() 
     { 
      using (NewUOCompany db = new NewUOCompany()) 
      { 

      } 

      var model = new InvoiceModel(); 
      return model.GetNextInvoiceNumber(CompanyID).ToString(); 
     } 

     #region Properties 
     protected int CompanyID { get; } 
     protected abstract string CompanyName { get; } 
     protected abstract string OutputFilename { get; } 
     protected abstract string SourcePDFPath  { get; } 
     #endregion 

Вот отрывок из класса ребенка имени GetEuropeanSubmissionForm:

public partial class GetEuropeanSubmissionForm : OrderFormBasePage 
    { 
     #region Properties 
     protected override string CompanyName 
     { 
      get { return Constants.companyNames.EuropeanCompanyName; } 
     } 
     protected override string OutputFilename 
     { 
      get { return "Submission Form - Europe.pdf"; } 
     } 
     protected override string SourcePDFPath 
     { 
      get { return "~/pdf/" + OutputFilename; } 
     } 
     #endregion 
    } 

Так в основном, когда пользователь хочет скачать Европейская форма pdf, они перенаправляются на страницу GetEuropeanSubmissionForm. Код позади будет поставлять правильное имя компании и правый pdf. Но pdf необходимо изменить, чтобы отобразить правильное имя CompanyName, CompanyID и номер счета-фактуры. Я знаю, как это сделать с помощью hardcoding конфигурационного файла, но это решение позволяет мне управлять кодом только в одном месте, а не во многих местах. Поэтому, если я хочу написать код для поиска CompanyID внутри OrderFormBasePage, и если я хочу искать базу данных для CompanyID, которая соответствует объявлению CompanyName, вытащенному в GetEuropeanSubmissionForm, должно ли свойство CompanyName OrderFormBasePage содержать имя CompanyName, вытащенное GetEuropeanSubmissionForm? Я попробовал поиск "C# переопределить свойство возвращающее значение родительскому классу", но не нашел никаких результатов. Спасибо за любой совет!

ответ

1

enter image description here Да, когда базовый класс обращается к свойствам, он получит значения, установленные в родительском классе.

Проверьте этот пример, особенно свойство area и его использование в методе Shape.ToString().

https://msdn.microsoft.com/en-us/library/yd3z1377.aspx

+0

Если я попытаюсь использовать свойство CompanyName в используемом блоке внутри моего файла OrderFormBasePage, будет ли значение для свойства CompanyName быть полученным в файле GetEuropeanSubmissionForm? – HandleThatError

+1

Да, я добавил скриншот linqpad, чтобы доказать это :-) – Martijn

+0

Изображение очень помогает. Метод GetCompanyName() возвращает this.CompanyName, что означает свойство CompanyName из BaseOrderForm. Так что даже несмотря на то, что CompanyName является абстрактным в BaseOrderForm, он все равно возвращает значение из EuropeanOrderForm. И если была другая форма, которая вызывается после того, как пользователь нажал кнопку «Японская форма», например, JapaneseOrderForm, она вернет свойство CompanyName этой страницы, верно? Теперь это имеет смысл, я в основном просто задумываюсь вслух. Благодаря! :) – HandleThatError

1

Да.

Весь смысл переопределения в том, что все звонки этому члену, независимо от того, с какого типа они сделаны, вызывают переопределенную версию.

+0

Таким образом, чтобы уточнить, добавлю ли вы к члену CompanyName INSIDE в OrderFormBasePage, возвращаемое значение CompanyName - это все, что было получено на странице GetEuropeanSubmissionForm? Именно это я и надеюсь с этим переходом от конфигурационных файлов к унаследованным свойствам и методам. – HandleThatError

+1

Да; он всегда будет вызывать переопределенный элемент, независимо от того, откуда вы его вызываете. – SLaks

1

Это идея полиморфного поведения, общий знаменатель принимает различные формы поведения в зависимости от фактического экземпляра позади него.

Смежные вопросы