Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/64: Рейтинг темы: голосов - 64, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47

Отдельный класс для хранения различных параметров

03.07.2015, 00:42. Показов 12456. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Хотел создать отдельный класс для хранения параметров, которые используются в функциях другого класса, чтобы не расписывать длинную строку с параметрами, а обращаться к классу с параметрами. Но не знаю как это реализовать. Что именно надо включить в такой класс? поля, конструктор и методы для доступа к каждому полю? Помогите реализовать это, буду очень благодарен!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2015, 00:42
Ответы с готовыми решениями:

Класс-контейнер для хранения различных типов
Здравствуйте, товарищи!!! Подскажите, есть ли класс-контейнер для одновременного хранения в нем различных типов? Как я понял...

Нужно ли для события создавать отдельный класс?
Помогите разобраться с событиями. Читал уроки, но так и не разобрался. Как создать событие, которое будет вызываться если одна из...

Существует ли класс, для хранения графа
Здравствуйте! Подскажите, существует ли класс, для хранения графа? Добавлено через 3 часа 20 минут Не отказался бы и от визуализации.

15
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
03.07.2015, 00:54
Сделайте статический класс с полями - параметрами. Что-то типа
C#
1
2
3
4
5
public static class Params
{
    public static int param1;
    public static string param2;
}
Доступ к полям через имя класса, т.е.
в одном классе
C#
1
Params.param1=100;
в другом
C#
1
int count=Params.param1;
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
03.07.2015, 01:51  [ТС]
Ну это слишком простое. Я вот реализовал то, что надо, но оно с ошибками. Как его исправить, чтобы значение d в результате вычислений возвращалось по ссылке, ибо выводит сейчас значение, которое присвоено при первоначальной инициализации. Вообще это легально передавать в конструктор значение по ссылке?
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
46
47
48
49
50
51
52
53
54
55
56
57
 public class Params
    {
 
        public double _a { get; set; }
        public double _b { get; set; }
        public double _c { get; set; }
        public double _d { get; set; }
 
        public Params(double a, double b, double c, ref double d)
        {
            this._a = a;
            this._b = b;
            this._c = c;
            this._d = d;
        }
 
        public double getA()
        { return _a; }
        public double getB()
        { return _b; }
        public double getC()
        { return _c; }
        public double getD()
        { return _d; }
    }
 
    class SomeClass
    {
        public void Sum(Params p)
        {
            double l;
            l = 2*p.getA();
            l = l + p.getB() + p.getC(); //8
            Console.WriteLine("l={0}", l);
            ///
            /// 
            ///
            p._d = l + p._b + p._c;//12
            Console.WriteLine("p.d={0}", p._d);
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            double a = 2;
            double b = 3;
            double c = 1;
            double d = 0;
 
            SomeClass sOb = new SomeClass();
            sOb.Sum(new Params(a, b, c, ref d));
            Console.WriteLine("d={0}", d);
            Console.ReadKey();
        }
    }
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
03.07.2015, 01:53
Ключевое слово static - прочитайте об этом, а также о месте хранения в памяти
0
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
03.07.2015, 10:02
nautilus209, назовите хотя бы одно(!) преимущество вашего решения перед предложенным. Если честно это кошмар...

Добавлено через 1 час 13 минут
Первое - можете объяснить почему вы создаете открытые автосвойства и пишете к ним открытые методы которые берут из них значения? Второе - передача по ref в конструктор? Вы ожидали другого эффекта?Прочитайте что такое value и reference типы. В общем глядя на ваше решение хочется сказать только одно. Сначала изучите язык, а потом изобретайте такие велосипеды)
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
03.07.2015, 10:42  [ТС]
Согласен, их надо было сделать закрытыми, но это не суть. Преимущество должно быть в том, чтобы не пришлось писать
C#
1
public void Sum(double a,  double b, ... , ref double z)
а всего лишь
C#
1
public void Sum(Params p)
Можно ли как-нибудь исправить все это?
0
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
03.07.2015, 10:57
nautilus209, а почему закрытыми?Вы опять не понимаете, что такое автосвойства и как они работают. В Вашем случае должен быть public get; и private set; .Писать методы которые возвращают значения внутренних полей это очень плохой стиль в шарпе. А вас не смущает, что созданный класс для настроек будет хорошо подходить только для одного метода. Тем более метод жестко привязывается к классу этому. Более эти настройки вообще нигде особо не применишь. Либо придётся подгонять сигнатуру методов под этот класс. Это очень неудачное решение.
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
03.07.2015, 11:47  [ТС]
Если сделать public get и private set компилятор ругается. Я как раз и делаю этот класс для одного метода. Плохой стиль или не плохой, но мне надо это сделать. Есть конкретные советы по исправлению кода, в частности как сделать возврат результата?
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
03.07.2015, 12:02
nautilus209,
Как вариант
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
      class Program
    {
        public static void Main(string[] args)
        {
            double a = 2;
            double b = 3;
            double c = 1;
            double d = 0;
 
            SomeClass sOb = new SomeClass();
            var sum = sOb.Sum(new Params(a, b, c, d));
            Console.WriteLine("d={0}", sum);
        }
    }
 
    public class Params
    {
 
        public double A { get; private set; }
        public double B { get; private set; }
        public double C { get; private set; }
        public double D { get; private set; }
 
        public Params(double a, double b, double c, double d)
        {
            A = a;
            B = b;
            C = c;
            D = d;
        }
    }
 
    class SomeClass
    {
        public double Sum(Params p)
        {
            double l = 2 * p.A;
            l = l + p.B + p.C;
            return l;
        }
    }
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
03.07.2015, 12:28  [ТС]
XRoy, возвращать планировалось целую кучу результатов, т.е. например два входных параметра и 10 выходных. Поэтому я хотел использовать ref. Как это можно сделать?
0
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
03.07.2015, 13:11
nautilus209, что это вообще за голубятня, зачем методы типа getA если это можно реализовать через через get; set;

Добавлено через 7 минут
есть 2 варианта реализации get и set:

первый по умолчанию:
C#
1
2
3
4
class param
{
    public int val { get; set; }
}
в таком случае ты можешь получать переменную val, но не можешь ее изменять (короче она только для чтения)

второй вариант это НЕ по умолчанию

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
class param
{
    protected int _val;
 
    public int val
    {
        get { return this._val; }
        set { this._val = value; } // value тут значение которое мы пытаемся присвоить
        // так же мы можем проверять что мы пытаемся присвоить, 
        // допустим если значение меньше нуля, а оно не должно быть меньше, 
        // тогда допустим присвоим ноль или сгенерируем ошибку
    }
}
но тут надо помнить, что реальное значение хранится в _val а обращаемся мы к val, это единственно что раздражает в этой реализации.
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
03.07.2015, 13:13
nautilus209,
Создаете класс с этими параметрами и возвращаете его
0
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
03.07.2015, 13:15
А вообще в скором будущем нас ждет такая хрень http://habrahabr.ru/post/256825/
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
03.07.2015, 13:21
Цитата Сообщение от nautilus209 Посмотреть сообщение
XRoy, возвращать планировалось целую кучу результатов, т.е. например два входных параметра и 10 выходных.
передавайте и возвращайте объект класса(разных классов).
Цитата Сообщение от nautilus209 Посмотреть сообщение
Преимущество должно быть в том, чтобы не пришлось писать
C#
1
public void Sum(double a, *double b, ... , ref double z)
а всего лишь
C#
1
public void Sum(Params p)
Можно ли как-нибудь исправить все это?
Можно, но не так как вы описали. Класс должен быть классом, единой сущностью, а не набором параметров. Иначе смысла в таком классе нет, никакой код вы не сократите, а даже наоборот, увеличите.
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
03.07.2015, 14:14  [ТС]
Не могли вы привести пример, по которому я смог бы переделать его под свой метод?
Пробовал изменить методы,но все равно требуемый результат не возвращается, ибо это реализовано косячно
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
public class Params
    {
        protected double _a;
        protected double _b;
        protected double _c;
        protected double _d;
        
          public Params(double a, double b, double c, ref double d)
        {
            _a = a;
            _b = b;
            _c = c;
            _d = d;
        }
 
          public double a
          {
              get { return this._a; }
              set { this._a = value; } 
          }
          public double b
          {
              get { return this._b; }
              set { this._b = value; }
          }
          public double c
          {
              get { return this._c; }
              set { this._c = value; }
          }
          public double d
          {
              get { return this._d; }
              set { this._d = value; }
          }
    }
 
    class SomeClass
    {
        public void Sum(Params p)
        {
            double l;
            l = 2 * p.a;
            l = l + p.b + p.c; //8
            Console.WriteLine("l={0}", l);
            ///
            /// 
            ///
            p.d = l + p.b + p.c;//12
            Console.WriteLine("p.d={0}", p.d);
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            double a = 2;
            double b = 3;
            double c = 1;
            double d = 0;
 
            SomeClass sOb = new SomeClass();
            sOb.Sum(new Params(a, b, c, ref d));
            Console.WriteLine("d={0}", d);
            Console.ReadKey();
        }
    }
0
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
03.07.2015, 14:22
Цитата Сообщение от VLK Посмотреть сообщение
в таком случае ты можешь получать переменную val, но не можешь ее изменять (короче она только для чтения)
вот тут я ошибся, мы можем как получать значение так и задавать его:
C#
1
public int val { get; set; }
а если мы хотим ограничить, т.е. только чтение, тогда:
C#
1
public int val { get; private set; }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.07.2015, 14:22
Помогаю со студенческими работами здесь

Класс для хранения логина-пароля
Здравствуйте, уважаемые. Накидал некоторый ГУЙ (Windows Forms) для MySQL. Текстбоксы для ввода логина-пароля и dataGridView для...

Реализовать класс для хранения данных
Вообще-м ,нужно реализовать класс для хранения данных ,например о товарах в магазинах(как пример взял,ну название,цена) Нужно хранить в...

Класс для хранения визуальных объектов
Проблемы создания классов вроде как и нету.. но, тута понадобилось создать класс для хранения визуальных объектов.. и возникли проблемы....

Описать класс для хранения информации о заказах
Описать класс для хранения следующей информации: номер заказа, дата заказа, стоимость, код исполнителя, дата выполнения. Все...

Описать класс для хранения массива чисел
Описать класс для хранения массива чисел. Перегрузить в классе оператор ++, который должен увеличивать каждый положительный элемент массива...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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