C # не предоставляет синтаксис, который позволяет вам определять поля для расширений свойств или статические расширения для классов.
Для этого вам следует использовать некоторое статическое свойство, например foo.ZeroOfFloat
, в качестве некоторых стандартных API C #определены следующим образом.
Это выглядит очень красиво и чисто, когда вы используете более общие вещи, но это не правильный вариант использования универсального.
«Универсальный» означает, что он является общим, для использования типа unrelavent, поэтому он отличается от определений шаблонов в C ++, который поддерживает специализацию.Технически, универсальные определения в C # компилируются и доставляются как IL, а не как исходный код в C ++, что означает, что компиляция происходит до того, как определенный тип подключен к универсальному определению, и не может быть специализации для одного типа.
Хотя существуют некоторые общие ограничения для ссылочных типов, типов значений, делегатов или собственных структур и т. Д., Которые ограничивают использование общего определения некоторыми типами типов.Это запрещает некоторые варианты использования, а не поддерживает что-то.
Хотя вы можете использовать это, могут быть разные методы расширения для универсального типа, который закрыт аргументами другого типа (что дает вам ощущение специализации шаблона).), то есть не задумано.
Не достигайте определенной логики в общем определении.Определения, такие как ZeroOfFloat
, никогда не бывают плохими.