Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
4 / 4 / 1
Регистрация: 21.07.2013
Сообщений: 67

Если класс заранее не известен

21.05.2016, 17:21. Показов 1428. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно создать объект, но к какому классу он будет принадлежать, мне заранее неизвестно.
Конкретная реализация экземпляра объекта происходит в блоке switch case. Что-то типа:

C#
1
2
3
4
5
6
7
var cls;
 
switch(i)
{
     case 1: cls = new ClassA(); break;
     case 2: cls = new ClassB(); break;
}
компилятор ругается на var cls;
Как поступить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2016, 17:21
Ответы с готовыми решениями:

Распаковка object, если заранее не известен тип
Есть 2 класса с абсолютно одинаковыми свойствами. В программе создаются экземпляры этих классов. Затем передаются для обработки в метод...

Как разделить строку на подстроки, если известен разделитель
Есть ли функция которая разделяет строку, как Explode(php) Сама строка хранит в себе примерно такой код Str+code+Str+code+Str, Str -...

Как можно узнать характеристики компьютера, если известен только IP-address
Как вот такое можно сделать ? Хотел вот на работу устроиться, сказали, если это сделаешь - примем. Помогите пожалуйста ребята

13
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
21.05.2016, 17:28
Сделать так, чтобы ClassA и ClassB наследовались от одного и того же базового класса или интерфейса, и сооответственно указать тип этого базового класса или интерфейса вместо var. Еще можно указать dynamic или object, но не желательно.
1
4 / 4 / 1
Регистрация: 21.07.2013
Сообщений: 67
21.05.2016, 17:33  [ТС]
классы не мои к сожалению, из библиотеки с общим namespace.
dynamic вроде прокатило, спасибо.
0
116 / 115 / 64
Регистрация: 03.06.2013
Сообщений: 582
21.05.2016, 17:38
crn, дайнамик это плохой выход.
0
4 / 4 / 1
Регистрация: 21.07.2013
Сообщений: 67
21.05.2016, 17:50  [ТС]
а как сделать по другому?

Добавлено через 10 минут
Сейчас столкнулся с такой проблемой, что при создании экземпляра класса cls не видны его поля и методы.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
21.05.2016, 18:09
Цитата Сообщение от crn Посмотреть сообщение
Сейчас столкнулся с такой проблемой, что при создании экземпляра класса cls не видны его поля и методы.
В Intellisense и не будет видно, если вы dynamic используете. Все вручную прописывать надо и будет работать. Поэтому лучше использовать явно указанные типы (базовый класс или интерфейс).
1
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,335
21.05.2016, 18:19
crn, ссылка cls может указывать на ClassA или ClassA только в том случае, если её тип является общим для этих классов. dynamic - разновидность "магии", которую нельзя трогать без понимания фундаментальных основ языка (твой случай). Если у классов нет ничего общего (они из разных иерархий классов и у них нет общих методов), то приведение их к одному типу бессмысленно. Единственная разумная причина делать так - хранение ссылки и последующее обратное выведение типа (посредством рефлексии - cls.GetType()).

Пересмотри архитектуру своего приложения. Твой вопрос - результат ужасного говнокода. Если сам не можешь, то детально опиши изначальную проблему - зачем тебе понадобилось делать так. Тебе наверняка подскажут лучшее, более элегантное решение.
1
4 / 4 / 1
Регистрация: 21.07.2013
Сообщений: 67
21.05.2016, 18:21  [ТС]
да, насчет говнокода согласен.
Думаю все таки пересмотрю архитектуру. Спасибо.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.05.2016, 21:58
Цитата Сообщение от crn Посмотреть сообщение
классы не мои к сожалению, из библиотеки с общим namespace.
Посмотрите, что между классами общего из того, что вы хотите использовать: родительский класс или интерфейс.
И создавайте переменную соответствующего класса.

Как вариант, можете сдеать свой класс-обертку с необходимым интерфейсом.
1
4 / 4 / 1
Регистрация: 21.07.2013
Сообщений: 67
21.05.2016, 22:10  [ТС]
навряд ли прокатит, т.к. этих классов больше трех сотен.
Скорее придется архитектуру пересмотреть.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
21.05.2016, 22:18
Цитата Сообщение от crn Посмотреть сообщение
этих классов больше трех сотен
И все они не имеют ничего общего? Что за библиотека такая? Посмотреть на нее где нибудь можно?
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,335
22.05.2016, 05:25
Цитата Сообщение от crn Посмотреть сообщение
этих классов больше трех сотен
И все три сотни ты хотел через switch прогнать? Что-то тут точно не так
0
4 / 4 / 1
Регистрация: 21.07.2013
Сообщений: 67
25.05.2016, 14:03  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
И все они не имеют ничего общего? Что за библиотека такая? Посмотреть на нее где нибудь можно?
vvTSLtools.dll - это сборник биржевых индикаторов для программы TSLab
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,335
25.05.2016, 15:08
crn, выложи библиотеку на форум.

И ещё было бы класс, если бы ты более подробно описал что и как ты хочешь использовать из этой библиотеки. Ибо не очень ясно зачем тебе ссылка способная указывать на 300 разных классов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2016, 15:08
Помогаю со студенческими работами здесь

Подсчитать сумму членов арифметической прогрессии, если известен ее первый член и разность
Помогите пожалуйста. Без всяких сложных заморочек, так как я только начинающий

Возможно ли создать массив, если количество элементов заранее не известно?
Существует ли возможность создать массив, если количество элементов заранее не известно? Интересует конкретно массив, по причине того что...

Вычислить сумму, когда вид функции заранее не известен
Здравствуйте люди с мозгом! помогите пожалуйста,заранее спасибо!!!!! Написать подпрограмму для вычисления суммы...

Распределение массивов по массивам у которых одинаковое значение ключа (Ключ заранее не известен)
Каким образом, если можно на примере, можно распределить массив из массивов, если у них имеется ключ с одинаковым значением. Что бы было...

Минимизация окна, класс которого известен
Можно ли из моей программы минимизировать любое окно класс которого я знаю .... ???


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru