Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
1
.NET 4.x

Как лучше инкапусулировать тип расчета?

15.06.2015, 20:09. Показов 510. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите. как лучше сделать, когда в зависимости от выбранных чекбоксов выбрать тип расчета. Кучу ифов городить что-то не хочется.
Как лучше инкапусулировать тип расчета?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2015, 20:09
Ответы с готовыми решениями:

Как лучше организовать систему расчета цены ноутбука
Имеется программа хранения ноутбуков, сами ноутбуки, их характеристики. Естественно что нужно...

Как лучше взять тип данных?
Вводится матрица, выводится, считаются кратные двойке члены. Подскажите пожалуйста как правильнее...

Какой тип переменной лучше выбрать?
Собственно возникла следующая проблема:при записи числа - 4 294 967 295, значение переменной...

Какой тип данных лучше для БД
Здравствуйте, хочу сделать свою БД типа ключ - значение. Какой лучше использовать тип данных? ...

10
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
15.06.2015, 20:16 2
m0,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Limitations lim;
    ...
    switch((int) lim)
    {
       case 1: ..
       case 2: ..
       case 3: ..
    }
    ...
    [Flags]
    public enum Limitations
    {
        ByCarcase = 0x01,
        ByWidth   = 0x02,
        ByHeight  = 0x04
    }
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
15.06.2015, 20:22  [ТС] 3
Storm23, А если два чека, или все три
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
15.06.2015, 20:37 4
m0, FlagsAttribute
1
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
15.06.2015, 20:44  [ТС] 5
Хотелось бы еще увидеть практичные решения.
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
15.06.2015, 20:51 6
Цитата Сообщение от m0 Посмотреть сообщение
еще увидеть практичные решения.
Не знаю, как на счет практичности, кода тут не в пример больше, чем у тов. Storm23-а, но если все это глубоко запрятать, то потом получается очень простое использование - вызов нужного метода из словаря.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1 {
    class Program {
        static Dictionary<CheckItem, Func<double>> GetResult = new Dictionary<CheckItem, Func<double>>();
        static void Main(string[] args) {
            FillResults();
            CheckItem item = new CheckItem(true, false, true);
            double result = GetResult[item]();
        }
        static void FillResults() {
            GetResult.Add(new CheckItem(true, true, true), () => { return 0.0; });
            GetResult.Add(new CheckItem(false, false, false), () => { return 0.0; });
            GetResult.Add(new CheckItem(true, false, false), () => { return 0.0; });
            GetResult.Add(new CheckItem(true, true, false), () => { return 0.0; });
            GetResult.Add(new CheckItem(false, true, true), () => { return 0.0; });
            GetResult.Add(new CheckItem(false, false, true), () => { return 0.0; });
            GetResult.Add(new CheckItem(true, false, true), () => { return 0.0; });
            GetResult.Add(new CheckItem(false, true, false), () => { return 0.0; });
        }
    }
    class CheckItem {
        public CheckItem(bool carcase, bool width, bool height) {
            ByCarcase = carcase;
            ByWidth = width;
            ByHeight = height;
        }
        public bool ByCarcase { get; set; }
        public bool ByWidth { get; set; }
        public bool ByHeight { get; set; }
 
        public override bool Equals(object obj) {
            return string.Compare(obj.ToString(), this.ToString()) == 0;
        }
        public override int GetHashCode() {
            return this.ToString().GetHashCode();
        }
        public override string ToString() {
            return string.Format("{0}, {1}, {2}", ByCarcase, ByWidth, ByHeight);
        }
    }
}
1
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
15.06.2015, 21:08  [ТС] 7
insite2012, Это даже больше нравится, но какую смысловую нагрузку здесь несет перегрузка икулас() и гетхешкод()?
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
15.06.2015, 21:10 8
Цитата Сообщение от m0 Посмотреть сообщение
какую смысловую нагрузку здесь несет перегрузка икулас() и гетхешкод()?
Для корректного использования пользовательского элемента в качестве ключа в словаре.
1
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
15.06.2015, 21:15  [ТС] 9
insite2012, Точно! Не заметил эту строчку
C#
1
CheckItem item = new CheckItem(true, false, true);
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
15.06.2015, 22:18 10
insite2012, тогда уж лучше анонимными классами воспользоваться. У них и GetHashCode и Equals переопределены:

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
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication196
{
    internal class Program
    {
        static Dictionary<object, Func<double>> Functions = new Dictionary<object, Func<double>>();
 
        static void Main(string[] args) 
        {
            FillResults();
            //
            var item = new {ByCarcase = true, ByWidth = false, ByHeight = true};
            double result = Functions[item]();
 
            Console.WriteLine(result);
            Console.ReadLine();
        }
 
        static void FillResults()
        {
            Functions.Add(new { ByCarcase = true, ByWidth = true, ByHeight = true }, () => { return 1.0; });
            Functions.Add(new { ByCarcase = false, ByWidth = true, ByHeight = true }, () => { return 2.0; });
            Functions.Add(new { ByCarcase = true, ByWidth = false, ByHeight = true }, () => { return 3.0; });
            Functions.Add(new { ByCarcase = false, ByWidth = false, ByHeight = true }, () => { return 4.0; });
            Functions.Add(new { ByCarcase = true, ByWidth = true, ByHeight = false }, () => { return 5.0; });
            Functions.Add(new { ByCarcase = false, ByWidth = true, ByHeight = false }, () => { return 6.0; });
            Functions.Add(new { ByCarcase = true, ByWidth = false, ByHeight = false }, () => { return 7.0; });
            Functions.Add(new { ByCarcase = false, ByWidth = false, ByHeight = false }, () => { return 8.0; });
        }
    }
}
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
15.06.2015, 22:46 11
Цитата Сообщение от Storm23 Посмотреть сообщение
тогда уж лучше анонимными классами воспользоваться. У них и GetHashCode и Equals переопределены
Да, согласен. Но с простым классом как-то попроще для понимания, хотя это кому как)))
0
15.06.2015, 22:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2015, 22:46
Помогаю со студенческими работами здесь

Какой тип лучше возврощать из метода?
Подскажите как(какой тип) лучше возвращать из методов? Например в задачах про массивы надо чтобы...

Какой тип матрицы лучше для игр?
какой тип матрицы лучше для игр?

Какой тип охлаждения лучше для процессора?
Скажите пожалуйста, какой тип охлаждения лучше(экономичнее,эфективнее) - боксовое, или то, которое...

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать...

Какой тип лучше всего подойдет для числа?
Есть число 2455903.795232, какой для него лучше всего тип переменной использовать?

Какой тип матрицы лучше всего подойдёт для Игр?
TFT A-MVA TFT AH-IPS TFT E-IPS TFT e-PLS TFT H-IPS TFT IPS TFT MVA TFT P-IPS TFT PVA TFT...


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

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