Какая разница между статическим методом struct и методом статического класса?

Недавно я обнаружил, что структуры в С# могут иметь методы.

Вполне случайно, я обнаружил, что использовал статический метод пустой структуры в моем коде, а не статический метод статического класса, с которым, как я думал, я работает!

например.

public struct Foo
{
    public static void Bar(Param param)
    {
        ...
    }
}

На данный момент он не используется как структура, поскольку он вообще не имеет свойств!

Отличается ли это от использования статического метода класса (статического или иного)? Есть ли какие-то причины предпочесть друг другу? (Моя кишка говорит мне, что использование статического метода struct, как минимум, менее интуитивно понятное)

Ответ 1

Нет, статические члены относятся к типу, а не к экземплярам типа. Нет никакой разницы (ни в отношении производительности, ни семантики) между объявлением статических членов класса и статических членов структуры.

Важно отметить, что если функция типа только содержит статические члены, вместо этого вы должны использовать статический класс. С помощью structs существует неявный и неизменный публичный конструктор без аргументов. Если тип не будет иметь каких-либо методов экземпляра, следует удалить возможность создания экземпляров. Объявление класса static совпадает с объявлением его abstract sealed, поэтому разработчики не смогут случайно создать экземпляры, которые не имеют никакой цели.

Ответ 2

Поведение ничем не отличается. С# bastardized structs, значительно увеличивая пересечение структур и функций класса. Лично я бы просто использовал класс, потому что мне кажется более правильным для меня (конечно, больше в соответствии с соглашениями на большинстве языков).