Подтвердить что ты не робот

Как представить Enum в интерфейсе, если вы не можете

Хорошо, поэтому основа этого сообщения и объяснение названия проста. У меня есть интерфейс с методом. Этот метод на стороне пользователя будет принимать перечисление в качестве параметра. Но вы не можете определить перечисления в интерфейсе, поэтому я не вижу, как я могу даже определить этот метод, если я ожидаю тип Enum как один из входящих параметров.

Итак, как вы справляетесь с этой ситуацией? Как вы можете получить этот метод в своем интерфейсе. Вы не знаете, что Enum им потребуется для отправки, но вы точно знаете, что хотите, чтобы это было перечислением вместо магических строк.

Enum не является ссылочным типом, поэтому вы не можете использовать Object как тип входящего параметра. Поэтому не уверен, что делать здесь.

4b9b3361

Ответ 1

interface MyInterface
{
    void MyMethod(Enum @enum);
}

Ответ 2

public enum MyEnum
{
  Hurr,
  Durr
}

public interface MyInterface
{
  void MyMethod(MyEnum value);
}

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

Ответ 3

Если вы говорите об общих интерфейсах и о том, что С# не позволяет вам ограничивать общие типы для перечислений, ответы на этот вопрос включают два разных обходные.

Ответ 4

Определение перечисления - это определение класса или определение интерфейса. Вы могли бы просто поместить его в один из ваших файлов классов внутри пространства имен, но вне определения класса, но если несколько классов используют его, какой из них вы вставляете, и в зависимости от того, что вы выберете, вы получите "Имя типа не соответствует файлу name". Таким образом, "правильный" способ сделать это состоит в том, чтобы поместить его в свой собственный файл, так как вы бы использовали класс или интерфейс:

MyEnum.cs

namespace MyNamespace { internal enum MyEnum { Value1, Value2, Value3, Value4, Value5 }; } Тогда любые интерфейсы или классы в пространстве имен могут получить к нему доступ.