статический конструктор объектаэто не совсем правильная по смыслу фраза. Либо просто "статический конструктор" - что правильно, либо по смыслу еще "конструктор типа (класса)". Статический конструктор вызывается в момент когда runtime создает в памяти тип (или класс) (не объект, т.е. не экземпляр типа, а сам тип) для определенного Domain. Тип всегда существует в единственном экземпляре, поэтому и конструктор статический вызывается строго один раз. Типы инициализируются в памяти по мере надобности, поэтому и статический конструктор вызывается во факту при первом обращении к типу, либо для создания экземпляра этого типа, либо для вызова метода, либо для получения его метаданных и т.д.
j = j++
j = j++
говорит процессору: возьми значение из j (! фактически делает копию), положи его в обратно j и потом свою копию (а не то что в j) увеличь на единицу. А результат фактически отбрасывается.j = ++j
говорит процессору: возьми значение из j, увеличь на единицу и результат положи в j.
Либо оператором: https://docs.microsoft.com/en-us/dotnet/csharp/lan...
Либо модификатором объявления метода: https://docs.microsoft.com/en-us/dotnet/csharp/lan...
Либо ограничением generic параметра: https://docs.microsoft.com/en-us/dotnet/csharp/lan...