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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2019, 17:32   #1
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию Обобщения. Частная реализация метода.

Есть базовый абстрактный класс (скажем Parent), от него унаследован обобщенный абстрактный класс Parent<T>, который содержит одно поле типа Т. Обобщенный класс имеет достаточно много наследников с типом T = double (Child1<double>, Child2<double> и т.д.). В классе Parent определен абстрактный метод abstract void SetValue(string src). Так вот вопрос заключается в следующем: есть ли возможность в классе BaseClass<T> написать реализацию этого метода именно под double, чтобы во всех наследниках не лепить одну и ту же реализацию?
Код:
public abstract class Parent
{
   protected abstract void SetValue(string src);
   public static T CreateChild<T>(string src)
      where T : Parent, new()
   {
      T t = new T();
      t.SetValue(src);
      return t;
   }
}
public abstract class Parent<T>
{
   protected T value;
//реально ли сюда вставить некую реализацию метода SetValue(string src) только для типа T = double?
}
public class Child1 : Parent<double>
{
   protected override void SetValue(string src)
   {
      value = Convert.ToDouble(src);
   }
}
Конечно можно воткнуть еще один абстрактный класс между Parent<T> и Child1<double>, например DoubleParent : Parent<double>, и тогда наследник будет Child1 : DoubleParent. Но ради одного метода лепить такого горбатого не хотелось бы.
max_prorok вне форума Ответить с цитированием
Старый 27.06.2019, 17:39   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

А если T будет массивом, как базовый дабл туда запихает?
p51x вне форума Ответить с цитированием
Старый 27.06.2019, 17:49   #3
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А если T будет массивом, как базовый дабл туда запихает?
Дык это все понятно. Имеется ввиду именно частное решение для T = double. Если я правильно понимаю, то обобщения работают примерно также как и шаблоны в С++, т.е. при компиляции под конкретный тип компилируется свой класс. Так было бы неплохо, чтобы под тип double он добавил в реализацию этот метод, а под другие типы - нет.
max_prorok вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное поведение обобщения метода NikitaPuper C# (си шарп) 4 20.03.2018 10:05
Реализация метода greenleonardo Помощь студентам 0 20.09.2015 15:40
реализация метода Касиски logorn Помощь студентам 1 18.05.2011 19:28
Реализация метода сканирования на C++ Vivisektor Общие вопросы C/C++ 4 03.04.2011 12:30
реализация метода Хаффмана ShturmBan Помощь студентам 2 13.01.2010 15:46