Я пытаюсь найти способ создать класс, полный статических объектов, каждый из которых может иметь различные статические свойства.
Я хочу иметь возможность передавать эти свойства и даже устанавливать их какстатические свойства другого объекта, и я также хочу иметь возможность переключаться между объектами.
Вот пример, иллюстрирующий, что я имею в виду:
Создание и отправка сообщения
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 для установки свойств, но получение их вместо получения статических свойств объектов существенно медленнее, и мое приложение чрезвычайно чувствительно к скорости / задержке.
Возможно, есть лучший способ выполнить то, что я имеюпытаетесь сделать?
Заранее спасибо за помощь!
Уильям