Q1
Можете ли вы привести пример.
EDIT
Нет. Это не позволяет несколько. Ссылка здесь .
AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
Примечание AllowMultiple = false
.
Q2
Да, хотя дженерики могут дать небольшую выгоду. Ваш интерфейс не является действительно общим. Я не могу использовать IMaths<File>
например. Я действительно ответил на другой, но связанный вопрос здесь .
Вы можете добавить ограничения, такие как where T : ...
, но это также не поможет, поскольку вам нужно ограничиться только int
, double
, тогда как вы можете делать только where T : struct
, что не одно и то же. Здесь дженерики - просто украшение, и абстракция IMaths<T>
не может использоваться как есть (или может ли это? Может зависеть от вашего кода), и вам нужны конкретные классы или интерфейсы.
Безопасным вариантом здесь является субинтерфейс
interface IntMaths : IMaths<int>
{
}