Sobre variables no asignadas

Solo por curiosidad, no estoy tratando de resolver ningún problema.

¿Por qué solo deben asignarse variables locales?

En el siguiente ejemplo:

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 yb solo me da una advertencia yc me da un error?

Además, ¿por qué no puedo usar el valor predeterminado deTipo de valor y escribe el siguiente código?

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

¿Tiene algo que ver con la gestión de la memoria?

Respuestas a la pregunta(3)

Su respuesta a la pregunta