Доступ к элементу абстрактного интерфейса C#11
Я пытаюсь получить новое свойство из всех встроенныхINumber<T>
классы. Итак, я начинаю сint
(который должен вернуть 0).
Однако мне трудно получить это значение... (у меня установлен .NET 7 Preview 7).
Я бы подумал, что смогу сделать:
int additiveIdentity = int.AdditiveIdentity;
Но это выдает ошибку о доступе к нему в нестатическом контексте (это также не работает в статическом методе.
Я пытался получить к нему доступ наINumber<int>
:
int additiveIdentity = INumber<int>.AdditiveIdentity;
Это выдает эту ошибку:
UnitTest1.cs(11, 26): [CS8926] Статический член виртуального или абстрактного интерфейса может быть доступен только для параметра типа.
Учитывая, что этоAdditiveIdentity
имеет подпись:
public abstract static override TResult AdditiveIdentity { get; }
Я немного в тупике, как я могу это читать...
Конечно, мне не нужно использовать отражение?
1 ответ
Итак, я нашел ответ, к ним можно получить доступ только при работе с параметром общего типа.
Итак, хороший обходной путь для этого:
public static T GetAdditiveIdentity<T>() where T: INumber<T> => T.AdditiveIdentity;