Ваш второй пример не работает, поэтому давайте рассмотрим реальные варианты:
1.) Вызывается метод статического класса.
public Program {
Foo foo = Loader.Load();
}
public static Loader {
public static Foo Load() {
return new Foo();
}
}
2.) Вызывается статический метод в нестатическом классе.
public Program {
Foo foo = Loader.Load();
}
public Loader {
public static Foo Load() {
return new Foo();
}
}
3.) Метод экземпляра вызывается для экземпляра
public Program {
Foo foo = new Loader().Load();
}
public Loader {
public Foo Load() {
return new Foo();
}
}
Два первых одинаковы. Вызов статического метода одинаков, независимо от того, является ли класс статическим или нет.
Третий вариант создаст экземпляр класса в куче. Поскольку в классе нет элементов данных, он будет иметь размер около 16 байтов. В конечном итоге это будет мусор, но из-за небольшого размера, когда это произойдет, не имеет большого значения.
Вызов метода экземпляра также немного отличается от статического метода. Отправляется ссылка на экземпляр класса, доступ к которому можно получить через ключевое слово this
. В этом случае это не имеет большого значения, поскольку в объекте нет реальных данных для доступа.