Enum-подобный объект, который содержит свойства - PullRequest
0 голосов
/ 30 октября 2011

Я пытаюсь найти способ создать класс, полный статических объектов, каждый из которых может иметь различные статические свойства.

Я хочу иметь возможность передавать эти свойства и даже устанавливать их какстатические свойства другого объекта, и я также хочу иметь возможность переключаться между объектами.

Вот пример, иллюстрирующий, что я имею в виду:

Создание и отправка сообщения

class Program
{
    static void Main(string[] args)
    {
        MarketOrder Order = new MarketOrder("DELL", MessageProperties.SecurityType.Equity, MessageProperties.ExchangeDestination.ARCA.PostOnly);

        SendOrder(Order);

        Console.ReadLine();
    }


    public static void SendOrder(MarketOrder Order)
    {
        switch (Order.SecurityType)
        {
            case MessageProperties.SecurityType.Equity:
                // Equity sending logic here
                break;

            case MessageProperties.SecurityType.Option:
                // Option sending logic here
                break;

            case MessageProperties.SecurityType.Future:
                // Future sending logic here
                break;
        }
    }
}

Компиляция не требуется, поскольку она не позволяет мне переключать объект Order.SecurityType.

Класс MarketOrder

public class MarketOrder
{
    public readonly string Symbol;
    public readonly MessageProperties.SecurityType SecurityType;
    public readonly MessageProperties.ExchangeDestination ExchangeDestination;

    public MarketOrder(string Symbol, MessageProperties.SecurityType SecurityType, MessageProperties.ExchangeDestination ExchangeDestination)
    {
        this.Symbol                 = Symbol;
        this.SecurityType           = SecurityType;
        this.ExchangeDestination    = ExchangeDestination;
    }
}

Класс MessageProperties

public abstract class MessageProperties
{
    public class ExchangeDestination
    {
        public readonly string  Value;
        public readonly double  ExchangeFee;
        public ExchangeDestination(string Value, double ExchangeFeed)
        {
            this.Value = Value;
            this.ExchangeFee = ExchangeFee;
        }

        public abstract class ARCA
        {
            public static ExchangeDestination Only      = new ExchangeDestination("ARCA.ONLY", 0.01);
            public static ExchangeDestination PostOnly  = new ExchangeDestination("ARCA.ONLYP", 0.02);
        }

        public abstract class NYSE
        {
            public static ExchangeDestination Only      = new ExchangeDestination("NYSE.ONLY", 0.01);
            public static ExchangeDestination PostOnly  = new ExchangeDestination("NYSE.ONLYP", 0.03);
        }
    }


    public class SecurityType
    {
        public readonly string Value;
        public SecurityType(string Value)
        {
            this.Value = Value;
        }

        public static SecurityType Equity = new SecurityType("EQ");
        public static SecurityType Option = new SecurityType("OPT");
        public static SecurityType Future = new SecurityType("FUT");
    }
}

Перечисления отлично работают для того, что я пытаюсь сделать, за исключением того, что трудно иметь несколько свойств значения перечисления.Я рассмотрел использование атрибутов в Enums для установки свойств, но получение их вместо получения статических свойств объектов существенно медленнее, и мое приложение чрезвычайно чувствительно к скорости / задержке.

Возможно, есть лучший способ выполнить то, что я имеюпытаетесь сделать?

Заранее спасибо за помощь!

Уильям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...