Почему System.Net.Http.HttpMethod является классом, а не структурой? - PullRequest
0 голосов
/ 06 февраля 2019

Был предыдущий вопрос, связанный с точкой реализации в System.Net стандарта .Net, касающийся того, почему HttpMethod все еще не был перечислением.

Почему System.Net.Http.HttpMethod класс, а не перечисление?

У него есть отличный ответ на вопрос о расширяемости.

Однако, как я уже сказал в заголовке, почему это не структура?

Кажется, что вы прошли все тесты в соответствии с рекомендациями Microsoft? Это небольшая информация, которую можно найти в веб-приложениях, и я думаю, DELETE - самый длинный глагол и входит вниже рекомендуемых 16 байтов.

Это как-то связано со строками, являющимися промежуточным домом в .Net?Я знаю, что выигрыш может быть незначительным, но я просто хочу лучше понять.

1 Ответ

0 голосов
/ 16 февраля 2019

В структуре не будет большого преимущества по сравнению с классом.

Структуры идеально подходят для реализаций типов memcpy / memcmp, а в случае HttpMethod это не обязательно.

, еслиЕсли вы посмотрите на реализацию ядра .net https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpMethod.cs, то увидите, что он использует проверку равенства ссылок для сравнения экземпляров, что несколько быстрее, чем сравнение строк.Со структурами это было бы невозможно ... Поскольку большинство экземпляров структуры на самом деле были бы разными экземплярами, и им приходилось бы сравнивать строковые значения.

Учитывая, что строковые значения метода HTTP не очень длинные, на самом деле других нет.Преимущества структуры здесь, поскольку она содержит только одну строковую ссылку, и большинство экземпляров HttpMethod будут экземплярами статических полей класса HttpMethod.

Это также может быть простая строка, но тогда это не поможет в разрешении методовво время компиляции и тому подобное.

...