Sobre variáveis ​​não atribuídas

Apenas curioso, não estou tentando resolver nenhum problema.

Por que apenas variáveis ​​locais devem ser atribuídas?

No exemplo a seguir:

class Program
{
    static int a;
    static int b { get; set; }
    static void Main(string[] args)
    {
        int c;
        System.Console.WriteLine(a);
        System.Console.WriteLine(b);
        System.Console.WriteLine(c);
    }
}

Por quêa eb me dá apenas um aviso ec me dá um erro?

Addionally, porque eu não posso simplesmente usar o valor padrão deTipo de Valor e escreva o seguinte código?

        bool MyCondition = true;
        int c;
        if (MyCondition)
            c = 10;

Tem alguma coisa a ver com gerenciamento de memória?