это происходит, когда вы перегружаете конструкторы.
в вашем примере пустой конструктор public A():this(null){}
ищет конструктор, который может принимать значение объекта null. поскольку строка - это объект, который может принимать значения NULL, он вызывает этот конструктор.
этот пример кажется очень упрощенным.
более значимый пример (но все еще оставаясь базовым):
public class AddNumbers
{
public AddNumbers():this(100, 100)
{ }
public AddNumbers(int x, int y)
{
int sum = x + y;
Console.WriteLine(sum.ToString());
}
}
в этом примере, когда вызывающая программа вызывает пустой конструктор, она выводит 200. потому что она вызывает метод AddNumbers с x = 100, y = 100.
Я знаю, что это простой пример, но я надеюсь, что это проясняет ситуацию.