Код, который вы опубликовали, не компилируется, поэтому я пошел вперед и сделал несколько возможных вариантов.
1. Статическое поле и статический метод
public class Test
{
static string myVar = GetValue();
public Test()
{
}
static string GetValue()
{
return String.Empty;
}
}
В этом случае не имеет значения, где вы устанавливаете статическое поле: в конструкторе static (не представленном в коде) или в качестве инициализации статического поля. CLR будет инициализироваться как при загрузке типа в AppDomain. (Существует последовательность, такая как CLR вызывает статический конструктор вначале, а затем устанавливает все статические поля или наоборот - эта последовательность вышла из вашего контроля, хотя).
2. Настройка свойства в конструкторе
public class Test1
{
string MyVar{get;set;}
public Test1()
{
MyVar = GetValue();
}
string GetValue()
{
return String.Empty;
}
}
Это зависит от типа и использования. В этом конкретном случае я, вероятно, избегал бы этого делать, поскольку конструктор должен был быть легким. Если вы выполняете какую-либо тяжелую обработку, лучше переместить это в метод Initialize
с правильной обработкой ошибок и блоками try-catch
. Если вы не выполняете тяжелую работу, чтобы настроить свойство, просто поместите значение по умолчанию в конструктор, например MyVar = "EMPTY"
.
3. Установить свойство в другом классе.
public class Test
{
public string MyVar{get;set;}
public Test(){ }
public string GetValue()
{
return String.Empty;
}
}
//somewere else
Test t = new Test();
t.MyVar = t.GetValue();
Это выглядит немного странно, поскольку класс предоставляет состояние (свойство) и означает получение текущего состояния (метод GetValue). Два члена (свойство и метод) в этом случае, вероятно, должны быть объединены в один getter .