#java #c# #static #initialization #declaration
Вопрос:
Обычно в java
вы можете объявить переменную экземпляра, а затем инициализировать ее внутри конструктора или внутри метода.
Но когда я попытался это сделать, C#
он выдал мне ошибку, в которой говорилось, что это должна быть статическая переменная.
На этом изображении я объявил переменную экземпляра объекта MailMerger, а затем инициализировал ее внутри конструктора. Но когда я попытался использовать экземпляр, он выдал мне ошибку с просьбой, чтобы это было static
так .
Кто-нибудь может, пожалуйста, объяснить мне причину этого, пожалуйста? Заранее спасибо.
Комментарии:
1. ФУ, это привело бы к той же ошибке в Java!
Ответ №1:
Вы вызываете нестатический элемент из статического метода, который не разрешен, как говорится в ошибке.. Вы можете исправить это MailMerger
, также сделав статику
Class Program
{
static MailMerger merge;
//rest of your code
}
Другим вариантом является создание экземпляра MailMerger
внутри статического метода.
Комментарии:
1. Спасибо за разъяснение, я просто был сбит с толку, потому что в java я использовал экземпляр только в статическом методе none, но я никогда этого не понимал, так что фактической разницы между java и C#нет,оба выдадут ошибку, я просто недостаточно информирован, Спасибо за разъяснение еще раз.
Ответ №2:
Причина Main
в том, что метод статичен, пока merge
переменная находится в области видимости экземпляра.
Вы должны изменить конструктор на статический, а также переменную.
Комментарии:
1. Я знаю, как это исправить, мне просто было интересно, как это работает на java, но вы заставили меня понять, что это работает только в статических методах, даже в java, так что фактической разницы нет, я просто запутался. Спасибо за разъяснение.
Ответ №3:
Вы указали MailMerger
Program
конструктор in, но вам нужно создать экземпляр метода Program
in Main
. В вашем Main
методе вы вызываете merge
метод, который никогда не был инициализирован. Если вы создадите новый экземпляр Program
класса, как это:
Program p = new();
Чем вы можете назвать merge
поле:
p.merge.Merge();