Recentemente, eu conheci um detalhe em C# e gostaria de compartilhar com vocês. Vejam o seguinte código:

    class Car {
        public Car()
        {
            Console.WriteLine("Eu sou um carro");
        }
    }
    class Celta : Car
    {
        public Celta()
        {
            Console.WriteLine("Eu sou um Celta");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var celta = new Celta();
        }
    }

Observe que o construtor de Celta não chama o construtor da classe base. Mas o comportamento do construtor é exatamente igual a da classe abaixo:

    class Celta : Car
    {
        public Celta()            
            : base()
        {
            Console.WriteLine("Eu sou um Celta");
        }
    }

A saída dos dois programas é a mesma:

Eu sou um carro
Eu sou um Celta

Internamente o compilador chama o construtor da classe superior pra você. Eu achei que esse “atalho” é um erro da linguagem já que não tem uma forma elegante do construtor não ter esse comportamento.