Доступ к элементу абстрактного интерфейса 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;
Другие вопросы по тегам