@splunk

С#. Почему локальным переменным, определенным в методе, необходимо задавать начальное значение, а полям класса можно не задавать?

С#. Почему локальным переменным, определенным в методе, необходимо задавать начальное значение, а полям класса можно не задавать?
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Потому что поле класса автоматически инициализируется дефолтным значением перед выполнением конструктора.
class Test
{
    public int a = 10;
    public int b; // автоматически будет 0
    public int с; // тут сначала будет 0, потом в конструкторе станет 20
    public Test()
    {
        c = 20;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
И там и там можно не задавать, нужно понимать что вы хотите сделать.
using System;

public class Test<T>
{
    // Перед вызовом конструктора выставится в default(int), то есть 0 
    private int i;

    // Для ссылочного типа default(object) будет null
    private object obj;

    // default(T)
    private T t;

    public Test()
    {
        // Не инициализированная переменная
        int foo;

        // error CS0165: Use of unassigned local variable 'foo'
        Console.WriteLine(foo.ToString());

        foo = 0;

        // У foo появилось значение, теперь переменной можно пользоваться
        Console.WriteLine(foo.ToString());

        int bar;

        // error CS0165: Use of unassigned local variable 'bar'
        Ref(ref bar);

        // Для ref нужна инициализированная переменная
        Ref(ref foo);

        // Для out не нужна
        Out(out foo);
        Out(out bar);
    }

    private void Ref(ref int r)
    {
        r = 0;
    }

    private void Out(out int o)
    {
        o = 0;
    }
}

Подробнее читайте в MSDN здесь и здесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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