Просто чтобы понять, почему следующая реализация не будет работать :
public class Magic{
private static Magic magic = new Magic();
public static Magic Instance{
get
{
magic.BaseMethod();
return magic;
}
}
public void BaseMethod(){
}
//runs BaseMethod before being executed
public void Method1(){
}
//runs BaseMethod before being executed
public void Method2(){
}
}
В случае, если вы просто хотите удерживать объект Magic
, метод будет вызываться случайным образом:
Magic m = Magic.Instance; //this will trigger unwanted call on BaseMethod
, а также, если кто-то захочет вызвать BaseMethod
, он будет вызван дважды:
Magic.Instance.BaseMethod(); //two calls of the BaseMethod
который, конечно, имеет обходной путь, чтобы вернуть нежелательные объекты, используя get:
var unused = Magic.Instance;
Только для суммирования: Это невозможно (по крайней мере, пока) в C # .