У меня есть класс «TradingStrategy» с n подклассами («Strategy1, Strategy2 и т. Д.»). У меня простой пользовательский интерфейс, из которого я могу выбрать подкласс (у меня есть все подклассы класса «TradingStrategy» довольно легко). Теперь я хочу напечатать (в datagridview, listbox, combobox, не имеет значения) все общедоступные параметры выбранного подкласса.Получить свойства класса в C# (без создания экземпляра)
Я бы предпочел не создавать экземпляры подклассов.
namespace BackTester
{
class TradingStrategy
{
public string Name;
}
class MA_Test : TradingStrategy
{
new public string Name = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
public int len = 12;
public float lots = 0.1F;
public bool trendFollow = true;
public MA_Test()
{
}
}
class MA_Test2 : TradingStrategy
{
new public string Name = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
public int len = 24;
public float lots = 0.1F;
public bool trendFollow = true;
public MA_Test2()
{
}
}
}
С помощью этого кода я могу вставить в поле со списком каждый подкласс «TradingStrategy»
var type = typeof(TradingStrategy);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
foreach (var t in types){
if (t.Name == "TradingStrategy") continue;
boxStrategy.Items.Add(t.Name);
}
Я хочу быть в состоянии, из combobox.Text, получить все имя свойства и значения соответствующий подкласс. Я думаю, что прочитал (и попробовал) каждый пост здесь и на другом форуме. Многие используют отражения.
Каков самый простой способ получить эти опоры/значения?
Благодаря
Учитывая свойства не являются статичными, вы _have_ для создания экземпляра класса, чтобы читать их значения с помощью отражения. Но использование статики и отражения, скорее всего, не самый правильный способ решить вашу оригинальную проблему. – CodeCaster
Кроме того, почему вы «новичок» над полем «Имя» вместо того, чтобы сделать его «виртуальным» и иметь свойства «переопределить» в подклассах? –