Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2019, 16:52   #11
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

В общем, не знаю, насколько это правильно и красиво, но пришел вот к такому решению проблемы в итоге:
Код:
abstract class A
{
   protected abstract void SetValue(string src);
   public static T CreateValue<T>(string src)
      where T : A, new()
   {
      T t = new T();
      t.SetValue(src);
      return t;
   }
}
abstract class A<T> : A
{
   protected T value;
   protected A() {}
   protected A(T val)
   {
      value = val;
   }
}
class B : A<double>
{
   public B(double val) : base (val) {}
   public override void SetValue(string src)
   {
      value = Convert.ToDouble(src);
   }
}
class C : A<double>
... //аналогичен классу B
class D : A<Complex>
{
   public D(Complex val) : base (val) {}
   public override void SetValue(string src)
   {
      string[] temp = src.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
      value.Re = Convert.ToDouble(temp[0]);
      value.Im = Convert.ToDouble(temp[1]);
   }
}

static class Program
{
   static void Main()
   {
      Dictionary<B,C> dic = GetValues<C>();
      Dictionary<B,D> dic = GetValues<D>();
   }
   
   static Dictionary<B,T> GetValues<T>()
      where T : A, new()
   {
      Dictionary<B,T> res = new Dictionary<B,T>();
      string[] strs = File.ReadAllLines("test.txt");
      foreach (string str in strs)
      {
         string[] temp = str.Split(new char[] {'\t'}, StringSplitOptions.RemoveEmptyEntries);
         res.Add(new B(Convert.ToDouble(temp[0]), A.CreateValue<T>(temp[1]));
   //или res.Add(A.CreateValue<B>(temp[0]), A.CreateValue<T>(temp[1]));
      }
      return res;
   }
}
max_prorok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание экземпляра подходящего класса GrandmaSquid3 Общие вопросы C/C++ 0 08.12.2018 18:23
Вызов конструктора производного класса для экземпляра базового класса max_prorok Помощь студентам 5 09.09.2015 09:39
Создание экземпляра класса biohazard120 Общие вопросы Delphi 11 15.09.2012 13:23
Освобождение памяти от экземпляра класса Mixim Общие вопросы .NET 8 05.01.2011 17:27
удаление экземпляра класса Juffin Общие вопросы Delphi 5 02.11.2010 11:57