У меня есть базовая страница для формы заказа. Внутри этой базовой страницы есть несколько свойств, которые являются абстрактными. Они переоцениваются в классе детей. Одно свойство, в частности, называется 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# переопределить свойство возвращающее значение родительскому классу", но не нашел никаких результатов. Спасибо за любой совет!
Если я попытаюсь использовать свойство CompanyName в используемом блоке внутри моего файла OrderFormBasePage, будет ли значение для свойства CompanyName быть полученным в файле GetEuropeanSubmissionForm? – HandleThatError
Да, я добавил скриншот linqpad, чтобы доказать это :-) – Martijn
Изображение очень помогает. Метод GetCompanyName() возвращает this.CompanyName, что означает свойство CompanyName из BaseOrderForm. Так что даже несмотря на то, что CompanyName является абстрактным в BaseOrderForm, он все равно возвращает значение из EuropeanOrderForm. И если была другая форма, которая вызывается после того, как пользователь нажал кнопку «Японская форма», например, JapaneseOrderForm, она вернет свойство CompanyName этой страницы, верно? Теперь это имеет смысл, я в основном просто задумываюсь вслух. Благодаря! :) – HandleThatError