Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Remmor
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309

Сократить код, несколько раз приводящий объект к разным типам

04.12.2013, 18:34. Показов 966. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как то можно упростить запись по if, а то при кол-ве потомков больше 5ти очень объемно получается..

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void SetValue (Control control, Value value)
{ 
   control.Name = value.Name;
   control.Height = value.Height;
   control.Width= value.Width;
   .... и тд
 ****
 if (control is Label) control.Text = value.Text;
   else if (control is Button) control.Text = "///";
         else ....
 ****
 
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.12.2013, 18:34
Ответы с готовыми решениями:

Шаблон функции сортировки массива структур по разным типам полей
Делаю лабу. Вот текст задания. Считайте все записи из файла "1.dat". Для чтения каждой отдельной записи осуществите динамический...

Код приводящий к утечке памяти
При тестирование программы на утечку памяти, возникли ошибки, подскажите как исправить unit Unit2; interface

Не получается отрисовывать один объект несколько раз! HTML 5 CANVAS
Здравствуйте! Я хочу, чтобы при клике на canvas добавлялся один объект в виде эллипса с координатами клика мыши. Этих объектов может...

12
 Аватар для lpvoid
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
04.12.2013, 18:38
у каждого контрола есть свойство Text. если вам нужно в зависимости от типа устанавливать значение, то никак по-моему.
http://msdn.microsoft.com/ru-r... .110).aspx
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
04.12.2013, 18:45
А кейсом не получиться такое сделать? Или по контролу, или по свойству текст
0
 Аватар для Remmor
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
04.12.2013, 18:50  [ТС]
Дело не в свойстве Text,это просто для примера.

Цитата Сообщение от lpvoid Посмотреть сообщение
если вам нужно в зависимости от типа устанавливать значение, то никак по-моему.
Печально. Есть еще мнения?


А если сделать
C#
1
Enum Type {Label, TextBox и тд}
и методы (
C#
1
public Type GetType (Control control),public Type GetType (Value value)
), которые бы возвращал тип через эти if'ы,
А в теле программы использовать
C#
1
switch (GetType (control)){}
Это сильно утяжелит код?

Добавлено через 40 секунд
Цитата Сообщение от Stelsing Посмотреть сообщение
А кейсом не получиться такое сделать? Или по контролу, или по свойству текст
я не понял Ваш ответ.
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
04.12.2013, 18:54
Я имел ввиду Switch использовать (еще от делфи не отвык). В общем Вы это уже и сами написали
0
 Аватар для Remmor
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
04.12.2013, 18:55  [ТС]
Stelsing, ясно. Ну да, ему-свичу же надо какое то значение подсовывать...
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
04.12.2013, 18:59
Вам нужно в зависимости от контрола вносить разные значения в Текст, правильно?
А если сделать так:
C#
1
2
3
4
5
6
7
8
9
switch (control)
{
    case label:
        control.Text = value.Text;
        break;
    case Button:
        control.Text = "///";
        break;
}
Или не захочет ?
0
 Аватар для Remmor
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
04.12.2013, 19:03  [ТС]
Stelsing, так нельзя. в данном коде control - ссылка, код будет сравнивать ссылки на объекты, причем откуда он возьмет label и Button ...
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
04.12.2013, 19:08
А сейчас label и Button у Вас откуда берется? из перечисления?
0
 Аватар для Remmor
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
04.12.2013, 20:05  [ТС]
Stelsing, там типы, а в Вашем примере это объекты, как я понимаю.


Подскажите можно как то реализовать метод GetType чтобы он вернул не Object, а тип который был передан в Object'e, т.е. int? typeof вернет же Object?

C#
1
2
3
4
5
int i = 0; 
var type = GetType ((Object) i)
....
private Type GetType  ((Object) type)
{ return typeof(type)}
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
04.12.2013, 20:26
Remmor, надеюсь это то, что Вам нужно
C#
1
2
3
4
5
6
7
8
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(typeof(int).ToString());//.Split('.').Last());
        Console.ReadKey();
    }
}
строку
C#
1
typeof(control).ToString()
можно вставлять в switch

Добавлено через 2 минуты
вот, запустите
Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
//using Test;
//using System.Collections.Generic;
//using System.Dynamic;
//using System.Threading;
using System.Linq;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(typeof(int).ToString());
        Console.WriteLine(typeof(int).ToString().Split('.').Last());
        Console.ReadKey();
    }
}
12-я строка поможет сократить операторы case
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
04.12.2013, 21:33
Цитата Сообщение от Remmor Посмотреть сообщение
Подскажите как то можно упростить запись по if, а то при кол-ве потомков больше 5ти очень объемно получается..
Ни if, ни switch здесь не поможет, все равно объем кода будет расти.

Можно сделать наследников контролов, реализовать интерфейс с методом SetValue, для каждого контрола реализовать свое присвоение.

И тогда можно весь код представить как

C#
1
2
3
4
5
6
7
8
9
10
11
public void SetValue (Control control, Value value)
{ 
 
var setValue = control as ISetValue;
 
if(setValue!=null)
{
setValue.SetValue(value);
}
 
}
1
 Аватар для Remmor
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
05.12.2013, 07:04  [ТС]
rattrapper, Спасибо, но это не совсем то. Вопрос был, как из общей коробочки (родителя) вытащить нужный тип потомка не прибегая к if'ам. Я не могу заранее сказать какой тип в обжекте (к примеру) будет скрываться.

Grishaco, спасибо за идею.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.12.2013, 07:04
Помогаю со студенческими работами здесь

Как отрисовывать один объект несколько раз! HTML 5 CANVAS
Такая история! Есть плавно увеличивающийся круг на полотне canvas! (круг появляется в рандомном месте полотна canvas). Как мне вызывать...

Один и тот же объект в одном выражении модифицируется несколько раз - неопределенное поведение
Уважаемые форумчане! Недавно столкнулся с интересным на мой взгляд необычным поведением компилятора c++ от keil. Определил класс шаблон...

Код повторяется несколько раз
http://jsfiddle.net/vxgyLzjy/33/ <div class="menu"> <span class="selector">Button 1</span> <span class="selector">Button...

Как можно уменьшить код если его куски повторяются по несколько раз?
Здравствуйте. Как можно уменьшить код если его куски повторяются по несколько раз? Для функций это повторения не на столько масштабные и...

Сократить объект типа string
У меня есть некоторый объест типа string (назовем его str). Как наиболее быстрым способом можно убрать последние N символов этого объекта?...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru