Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

В общем, не знаю, насколько это правильно и красиво, но пришел вот к такому решению проблемы в итоге:
Код:
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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


06:30.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.