Что эквивалент Java является перечислением в C#? [дубликат]

Хорошо я частично там. Если Вы входите в CompizConfig и включаете команды, можно установить одну из команд к чему-то, что изменит появление окна. Затем можно установить привязку клавиш для него к той же привязке, Вы используете для переключения Поверх остальных окон. Я просто не знаю, как заставить его изменить появление окна. Я пробовал wmctrl -r :ACTIVE -b toggle,shaded, который я думал, переключится тень, но она скрывается/раскрывает окно. Едва ли, для чего я шел. Следует иметь в виду, что необходимо установить wmctrl пакет для этого для работы.

я не знаю ни о каких с готовностью поддерживаемых способах изменить появление единственное окно. Я изучил использование gtk-window-decorator, но это только, кажется, позволяет Вам перезагрузить настройки для всех окон. Возможно, кто-то еще может вмешаться и завершить этот ответ, но я лично не могу изобразить выход!

27
задан Nosrama 3 September 2009 в 22:31
поделиться

4 ответа

Полная функциональность перечисления Java недоступна в C #. Однако вы можете разумно приблизиться, используя вложенные типы и частный конструктор. Например:

using System;
using System.Collections.Generic;
using System.Xml.Linq;

public abstract class Operator
{
    public static readonly Operator Plus = new PlusOperator();
    public static readonly Operator Minus = 
         new GenericOperator((x, y) => x - y);
    public static readonly Operator Times = 
         new GenericOperator((x, y) => x * y);
    public static readonly Operator Divide = 
         new GenericOperator((x, y) => x / y);

    // Prevent other top-level types from instantiating
    private Operator()
    {
    }

    public abstract int Execute(int left, int right);

    private class PlusOperator : Operator
    {
        public override int Execute(int left, int right)
        {
            return left + right;
        }
    }

    private class GenericOperator : Operator
    {
        private readonly Func<int, int, int> op;

        internal GenericOperator(Func<int, int, int> op)
        {
            this.op = op;
        }

        public override int Execute(int left, int right)
        {
            return op(left, right);
        }
    }
}

Конечно, у вас нет для использования вложенных типов, но они предоставляют удобную часть «настраиваемого поведения», для которой удобны перечисления Java. В других случаях вы можете просто передать аргументы частному конструктору, чтобы получить хорошо известный ограниченный набор значений.

Некоторые вещи, которые это вам не дает:

  • Порядковая поддержка
  • Поддержка переключателей
  • EnumSet
  • Сериализация / десериализация (как синглтон)

Некоторые из них, вероятно, можно было бы сделать с достаточными усилиями, хотя переключение на самом деле было бы невозможным без хакерства. Теперь, если язык сделал что-то подобное, он может делать интересные вещи, заставляя переключение работать, делая хакерские действия автоматическими (например, автоматически объявляя загрузку полей const и меняя любое переключение типа перечисления на переключение целых чисел, разрешая только «известные» случаи .)

Да, и частичные типы означают, что вам не обязательно иметь все значений перечисления в одном файле. Если каждое значение будет задействовано (что определенно возможно), у каждого может быть свой собственный файл.

t должны иметь все значений перечисления в одном файле. Если каждое значение будет задействовано (что определенно возможно), у каждого может быть свой собственный файл.

t должны иметь все значений перечисления в одном файле. Если каждое значение будет задействовано (что определенно возможно), у каждого может быть свой собственный файл.

36
ответ дан 28 November 2019 в 04:37
поделиться

Перечисления - одна из немногих языковых функций, которая лучше реализована в java, чем в C #. В java перечисления - это полноценные именованные экземпляры типа, тогда как перечисления в C # в основном именованные константы.

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

Есть ли какая-то особенность, которую вы ищете?

18
ответ дан 28 November 2019 в 04:37
поделиться

Вы, вероятно, могли бы использовать старый шаблон перечисления типа безопасного типа, который мы использовали в Java до того, как получили реальные (при условии, что те, что в C # действительно не являются классами, как утверждается в комментарии). Шаблон описан незадолго до середины этой страницы

5
ответ дан 28 November 2019 в 04:37
поделиться

enum , или вам нужно что-то конкретное, что есть в перечислениях Java, а в C # нет?

0
ответ дан 28 November 2019 в 04:37
поделиться