Почему я должен присвоить значение интервалу в C# когда значения по умолчанию к 0?

Помощники должны использоваться с шаблонами, т.е. представлениями, не в контроллерах. Вот почему Вы не можете получить доступ к методу. Если бы требуется совместно использовать метод между двумя контроллерами, необходимо было бы определить его в ApplicationController, например. помощник: все говорит, что любой метод, который Вы определяете в любом файле помощника в каталоге приложения/помощников, будет доступен любому шаблону.

24
задан John Bubriski 14 September 2009 в 19:28
поделиться

4 ответа

В первом примере это поле . Поля автоматически по умолчанию равны 0 / false / null. Во втором примере это переменная . Переменные не значения по умолчанию и должны иметь "определенное присвоение" перед их использованием.

По сути, при создании объекта (или инициализации структуры) он обнуляет память (или в случае не -default struct ctor, заставляет вас вручную инициализировать все). Однако переменные настолько распространены (в каждом методе), что не нужны накладные расходы, связанные с постоянным обнулением стека. Вместо этого он заставляет вас указать начальное значение.

34
ответ дан 28 November 2019 в 23:18
поделиться

Разве целые числа по умолчанию не равны 0?

Они имеют место, когда они являются членами данных класса, но не когда они являются локальной переменной: локальные переменные должны быть явно инициализированы перед их использованием, отсюда и ошибка компилятора.

11
ответ дан 28 November 2019 в 23:18
поделиться

Когда вы создаете новый экземпляр класса, вся память, которая требуется объекту, обнуляется, целые числа устанавливаются на 0, строки устанавливаются на null и т. Д. Это делается во избежание множество странных ошибок памяти и взломов, которые были возможны в C (++). К сожалению, это также имеет небольшую стоимость обработки, поэтому при создании локальной переменной язык предполагает, что вы очень скоро установите значение самостоятельно и не беспокоитесь об его обнулении, чтобы уменьшить общее количество требуемых инструкций. Чтобы компенсировать риск использования неустановленной памяти, здесь вводятся проверки компилятора, чтобы убедиться, что значение было установлено, прежде чем оно позволит вам использовать переменную.

2
ответ дан 28 November 2019 в 23:18
поделиться

Это могло быть потому, что переменной, объявленной на уровне класса, нельзя присвоить значение в той же области (кроме объявления)

например,

class Test
{
   int a;

   a = 0; // this is not allowed at class level & hence a initialized to default
}

, тогда как

class Test
{
   void test()
   {
     int a;
     int b = a;

     a = 20; // this is allowed
   }
}
2
ответ дан 28 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: