Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
8 / 8 / 2
Регистрация: 14.01.2012
Сообщений: 60
1

Унаследовать класс, чтобы методы были одни и теже, но типы данных разные

19.02.2012, 00:41. Показов 2201. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот, к примеру, есть у меня класс который хранит в себе char поля, и мне нужен такой же класс, только вместо char он будет содержать string. Методы одни и теже, но типы данных разные.
Я правильно понимаю что наследование тут не поможет? Неужели весь класс надо переписывать заново?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2012, 00:41
Ответы с готовыми решениями:

Можно ли вложить класс в другой класс чтобы были доступны приватные методы первого класса
Добрый день. Вопрос - можно ли в C# вложить класс в другой класс чтобы были доступны приватные...

Унаследовать класс, но так, чтобы не знать его типы
Здравствуйте! Можно ли как-нибудь унаследовать класс так, чтобы те типы, которые он использует,...

Надо, чтобы разные ссылки имели разные цвета и чтобы при наведении на них мышой также были разные цвета.
День добрый. Что-то я никак понять не могу. Делаю сайт. Мне надо, чтобы разные ссылки имели разные...

TabControl - сделать так, чтобы на первой странице были одни элементы, а на другой были другие элементы
Есть tabControl. Хочу сделать так, чтобы на первой странице были одни элементы, а на другой были...

18
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
19.02.2012, 01:53 2
Snowy, да, надо переписывать.
0
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 7
19.02.2012, 02:32 3
а var не поможет?
0
12 / 12 / 3
Регистрация: 30.11.2011
Сообщений: 76
19.02.2012, 03:48 4
По сути, это делается через обобщенные классы или обобщенные интерфейсы
1
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
19.02.2012, 10:13 5
Цитата Сообщение от FoxD Посмотреть сообщение
а var не поможет?
var - это синтаксический сахар для компилятора. В рантайме никаких var'ов нет.
Теоретически можно через dynamic, но это слишком для такой задачи.

Лучший вариант - как посоветовал Тапкожуй: через обобщение.
1
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
19.02.2012, 10:43 6
Хм... это конечно глупо немного, но если в классе ВСЕ char нужно заменить на string, то можно копирнуть в word или akelPad и использовать Поиск-Замену. Это конечно немного грубо)) Но когда-то мне помогло.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
19.02.2012, 18:03 7
Цитата Сообщение от Snowy Посмотреть сообщение
Вот, к примеру, есть у меня класс который хранит в себе char поля, и мне нужен такой же класс, только вместо char он будет содержать string. Методы одни и теже, но типы данных разные.
Я правильно понимаю что наследование тут не поможет? Неужели весь класс надо переписывать заново?
А ты приведи пример таких классов, у которых поля разных типов, но все методы одинаковые. А то вопрос сомнения вызывает.

Добавлено через 47 секунд
Цитата Сообщение от DimanRu Посмотреть сообщение
Хм... это конечно глупо немного, но если в классе ВСЕ char нужно заменить на string, то можно копирнуть в word или akelPad и использовать Поиск-Замену. Это конечно немного грубо)) Но когда-то мне помогло.
В студии это можно сделать минуя Word.
1
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
19.02.2012, 18:04 8
Незнал, но вобщем это не вариант наверно)
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
19.02.2012, 18:07 9
Цитата Сообщение от DimanRu Посмотреть сообщение
Незнал
Ctrl + F, там уже выбираешь, что и как делать.
0
158 / 148 / 25
Регистрация: 23.01.2011
Сообщений: 319
19.02.2012, 18:09 10
Наверное всётаки Ctrl + H.
2
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
19.02.2012, 18:11 11
Цитата Сообщение от Celly Посмотреть сообщение
Наверное всётаки Ctrl + H.
Ну да, я просто всегда Ctrl + F жму и переключаю (банально не знал, да и пофиг было, и так не напрягало). А ещё самая убойная комбинация есть, которую игнорирует большинство выкладывающих код - это Ctrl + E, D.
2
158 / 148 / 25
Регистрация: 23.01.2011
Сообщений: 319
19.02.2012, 18:15 12
Цитата Сообщение от Casper-SC Посмотреть сообщение
Ну да, я просто всегда Ctrl + F жму и переключаю (банально не знал, да и пофиг было, и так не напрягало). А ещё самая убойная комбинация есть, которую игнорирует большинство выкладывающих код - это Ctrl + E, D.
А я всегда нижнюю скобочку удаляю и ставлю и оно выравнивает как надо
0
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
19.02.2012, 18:16 13
Цитата Сообщение от Casper-SC Посмотреть сообщение
Ну да, я просто всегда Ctrl + F жму и переключаю (банально не знал, да и пофиг было, и так не напрягало). А ещё самая убойная комбинация есть, которую игнорирует большинство выкладывающих код - это Ctrl + E, D.
Об этом я тоже не слышал, зачем это?

Добавлено через 19 секунд
Цитата Сообщение от Celly Посмотреть сообщение
А я всегда нижнюю скобочку удаляю и оно выравнивает как надо
Кажется понял)) Действительно удобно!
P.S. Вы правы, её игнорируют
0
8 / 8 / 2
Регистрация: 14.01.2012
Сообщений: 60
22.02.2012, 19:35  [ТС] 14
Casper-SC,
Цитата Сообщение от Casper-SC Посмотреть сообщение
А ты приведи пример таких классов, у которых поля разных типов, но все методы одинаковые. А то вопрос сомнения вызывает.
К примеру стандартные Point и FPoint. Кстати, интересно чем они приходятся друг другу...
0
52 / 45 / 4
Регистрация: 07.10.2010
Сообщений: 95
24.02.2012, 02:51 15
Почему тут вариант с внутренним типом данных не предложили?
То есть сами данные хранятся в внутреннем типе. Все операции выполняются с внутренним типом.
И есть поле(метод) принимающий данные. Получается вместо того, что бы переписывать весь класс, можно перегрузить метод преобразования входных данных во внутриние.
0
86 / 54 / 15
Регистрация: 01.10.2010
Сообщений: 492
24.02.2012, 03:13 16
как вариант в первом классе может можно string использовать длиной в 1 символ?
0
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
24.02.2012, 04:31 17
Лучший ответ Сообщение было отмечено как решение

Решение

неужели так сложно подумать? сказали же использовать ОБОБЩЕННЫЕ ИНТЕРФЕЙСЫ, а базовую логику работы вынести в базовый обобщенный класс который наследует обобщенный интерфейс и все будет как хочет TC
вот пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication6
{
    public interface IMethods<T>
    {
        T Method1(T value);
        T Method2(T value);
        T Method3(T value);
    }
 
    public class TestBase<T> : IMethods<T>
    {
        public T Method1(T value)
        { return value; }
 
        public T Method2(T value)
        { return Method1(value); }
 
        public T Method3(T value)
        { return Method2(value); }
    }
 
    public class TestChar : TestBase<char> { }
    public class TestString : TestBase<string> { }
 
    class Program
    {
        static void Main(string[] args)
        {
            IMethods<char> testChar = new TestChar();
            IMethods<string> testString = new TestString();
            char charResult = testChar.Method3('H');
            string stringResult = testString.Method3("Hello World");
        }
    }
}
3
52 / 45 / 4
Регистрация: 07.10.2010
Сообщений: 95
24.02.2012, 14:17 18
А ни чего, что в коде есть такие строчки
C#
1
2
public class TestChar : TestBase<char> { }
public class TestString : TestBase<string> { }
И при более менее сложном случае производные классы придется заполнять кодом.
И все вернется к
Неужели весь класс надо переписывать заново
А еще, если вспомнить, что написать
C#
1
2
public  T Method1(T value1, T value2)
{ return value1 + value2; }
Придется его делать абстрактным и реализовывать в производных классах.
0
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
24.02.2012, 20:08 19
Учите, что такое наследование и програмные интерфейсы для чего оно нужно
P. S. в качестве "базового абстрактного класса" в моем коде выступает IMethods<T>
0
24.02.2012, 20:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2012, 20:08
Помогаю со студенческими работами здесь

Переписать предложение так чтобы были одни гласные
Помогите с заданием : Создать класс Sentence для обработки предложений Методы : 1)Заменить...

2 DataGridViev показывают одни и теже колонки
Доброго времени суток! У меня на форме 2 разные (DataGridView1 и DataGridView2) и 2 кнопки...

Вылазят постоянно одни и теже банеры (хром)
Собственно описание проблемы в теме вот логи:

Повторяется рандом, выводит одни и теже числа в цикле for i to
Помогите разобраться в причине. uses crt; var j: integer; cards: array of integer; masti:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru