6 / 6 / 5
Регистрация: 23.12.2012
Сообщений: 112

Преобразование типов

28.09.2015, 16:47. Показов 1817. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет есть вопросы по преобразованию типов точнее даже не знаю относиться ли эта проблема к этому.
вот код
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
41
42
43
44
45
 public class PropertyGrid<T>
    {
 
        public PropertyBuilder Target;
 
        public PropertyGrid(T list)
        {
            if (list.GetType() == typeof(TCP))
            { 
                PropertyBuilder tcp = new TCPBuilder<INode>(list);
                Target = tcp;
            }
            else if (list.GetType() == typeof (RTU))
            {
                PropertyBuilder rtu = new RTUBuilder<INode>(list);
                Target = rtu;
            }
        }
 
    }
 
    public abstract class PropertyBuilder
    {
 
    }
    public class RTUBuilder<T> : PropertyBuilder where T : INode
    {
        public string IPAddress { get; set; }
        public int Port { get; set; }
        public int SpeedRate { get; set; }
 
        public RTUBuilder(T list)
        {
           
        }
    }
    public class TCPBuilder<T> : PropertyBuilder where T : INode
    {
        public string IPAddress { get; set; }
        public int Port { get; set; }
 
        public TCPBuilder(T list)
        {
        }
    }
проблема в том что я не могу преобразовать тип "Т" в тип "INode"
возможно ли как-то это обойти? или что-то подобие, при сохранение подобия на паттерн билдер

кстати ругается тут
C#
1
2
3
                PropertyBuilder tcp = new TCPBuilder<INode>(list);
 
                PropertyBuilder rtu = new RTUBuilder<INode>(list);
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2015, 16:47
Ответы с готовыми решениями:

Преобразование типов
Как преобазовывать(копировать) ListBox.lines в List&lt;string&gt; Description = new List&lt;string&gt;(); и обратно?

Преобразование типов
Подскажите как в c# с массивом int можно поработать как с массивом byte; Как в с++, например, int * ip = new int ; (char *)ip = 7;

Преобразование типов....
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

4
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.09.2015, 17:27
Лучший ответ Сообщение было отмечено MrPhelko как решение

Решение

C#
1
public class PropertyGrid<T> where T : INode
Хотя я бы фабрику писал для такого:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public static class BuilderFactory
{
    public static PropertyBuilder GetOne<T>(T list) where T : INode
    {
        var type = list.GetType();
        if (type == typeof (TCP))
            return new TCPBuilder<INode>(list);
        if (type == typeof(RTU))
            return new RTUBuilder<INode>(list);
        throw new ArgumentException("Не определен билдер для типа " + type.Name);
    }
}
1
6 / 6 / 5
Регистрация: 23.12.2012
Сообщений: 112
29.09.2015, 09:07  [ТС]
Psilon, Привет, интересно, но таким способом тоже ошибки выдает
C#
1
2
3
4
5
6
7
8
9
10
11
public class PropertyGrid<T>
    {
 
        public PropertyBuilder Target;
 
        public PropertyGrid(T list)
        {
            Target = BuilderFactory.GetOne(list);// здесь ошибка
        }
 
    }
Тип "T" не может быть использован как параметр типа "T" в универсальном типе или методе "BuilderFactory.GetOne<T>(T)". Нет преобразования-упаковки или преобразования параметра типа из "T" в "DCS.Core.INode".


Хотя если отказаться от PropertyGrid и напрямую возвращать тип, то ошибок нет, но есть беда, у меня разные тип могут быть
RTU и TCP относятся к INode, но есть еще IServer, IDevice, IGroup, ITag

Добавлено через 27 минут
Psilon, Cпасибо, сделал для всех интерфейсов наследование от другого интерфейса и через него все отрабатывает
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.09.2015, 11:25
MrPhelko, зачем вам этот PropertyGrid сдался, если конечно в нем реально только одно свойство? Уберите его и пользуйтесь только этим PropertyBuilder или как его там.
1
6 / 6 / 5
Регистрация: 23.12.2012
Сообщений: 112
29.09.2015, 11:26  [ТС]
Psilon, избавился я уже от PropertyGrid
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2015, 11:26
Помогаю со студенческими работами здесь

Преобразование типов
Я унаследовал стандартный класс Socket в своем классе ASock. Вопрос о приведение типа Socket к моему классу ASock. Вот так не работает:...

Преобразование типов
Есть метод, который принимает на вход переменную типа IEnumerable&lt;DataRow&gt;; у меня есть datagridView. Могу ли я коллекцию строк...

Преобразование типов
Есть такая заковырка. Допустим есть переменая string a=&quot;54&quot;; , так вот как ее можно преобразовать к типу int или другому числовому типу,...

Преобразование типов
нужна помощь с преобразованием типа. Из текстового поля в которое предполагается введение 13 значного числа - ИНН Индивидуального...

Преобразование типов
Код: using System; using System.Text; public class Program { public static void Main(string args) { string...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru