У меня есть класс с именем ItemBase, от которого наследуется ряд классов.
В этом классе у меня есть ряд однострочных методов , которые просто возвращают строку или объект и доступны всем наследующим классам. Я немного использую их в унаследованных классах, чтобы сделать код более читабельным, и поэтому у меня всегда есть одно-единственное место, которое определяет каждое вычисление или фрагмент информации.
Я использовал Getter, как я использую в PHP и Java , так как я всегда делал это так:
public class ItemBase
{
protected string GetApplicationPath()
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
protected string GetApplicationDataPath()
{
return GetApplicationPath() + @"..\..\..\TestServices\";
}
}
Тем не менее, я заметил, что геттеры и сеттеры на самом деле не используются в C # , как в Java или PHP, и я подозреваю, что есть лучший, более краткий / стандартный способ сделать это в C #.
Но я не хочу использовать переменные класса , поскольку кажется неправильным определять логику в инициализаторе переменной класса, я предполагаю, что, хотя это возможно для некоторых вычислений, это, вероятно, осуждается и вызывает проблемы в некоторых случаях:
protected string _applicationPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
Я держусь подальше от открытых полей после прочтения о недостатках, которые у вас есть с ними в будущем в статье Джона Скита . Кроме того, это слишком много кода для простого определения.
protected string ApplicationPath
{
get
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
}
Я мог бы использовать сокращенные свойства C # , но тогда каждый маленький кусочек информации имеет код в двух местах, и имя используется дважды, просто не похоже на краткое решение.
protected string ApplicationPath { get; set; }
public ItemBase()
{
ApplicationPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
Итак, я остановился на , используя эти геттеры точно так же, как я делаю в PHP и Java , хотя это, похоже, не совсем C # способ сделать это.
Какие условные обозначения вы используете в C # для хранения этих «однострочных переменных класса», которые просто содержат часть информации или выполняют небольшие вычисления?
ОТВЕТ:
protected string ApplicationPath
{
get { return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase); }
}
protected string ApplicationDataPath
{
get { return ApplicationPath + @"..\..\..\TestServices\"; }
}