Хотя мне больше нравится предложение Йеруна Мостерта, вы можете сделать что-то вроде этого:
создать класс, содержащий ваш метод инициализации:
class LazyInitializer
{
private readonly Action initFunc;
class State { public bool Initialized = false; }
public LazyInitializer(Action initFunc)
{
this.initFunc = initFunc;
}
public Action CreateInitializer()
{
var state = new State();
return () =>
{
lock (state)
{
if (state.Initialized == false)
{
initFunc();
state.Initialized = true;
}
}
};
}
}
, а затем использовать его следующим образом:
var lazyInit = new LazyInitializer(() =>
{
//here your initialization code
...
_myField1 = ...
_myField2 = ...
...
});
//Create the initializer action
var initialize = lazyInit.CreateInitializer();
//use it like:
public object get_Field1() { initialize(); return _myfield1; }
public object get_Field2() { initialize(); return _myfield2; }