powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Возвращение из метода передаваемой параменной - это нормально?
19 сообщений из 19, страница 1 из 1
Возвращение из метода передаваемой параменной - это нормально?
    #38905468
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем грозит вот такое использование локальной переменной value?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public double MakeSomeWork(double value, ...)
{
    double a = 5.6;
    a = value + 3.1;
    value = a + GlobalConstants.MyConstant;
    
    return value;
}



Да даже просто если так

Код: c#
1.
2.
3.
4.
public double MakeSomeWork(double value)
{
    return value * GlobalConstants.MyConstant;
}



Примеры от фонаря. Главное суть - что я чего-то делаю с переданным значением и возвращаю эту же локальную переменную.

Глянул спецификацию - какие-то "in"-параметры, хотя такого ключевого слова для параметров по аналогии с out нет.

авторA value parameter is used for "in" parameter passing, in which the value of an argument is passed into a method, and modifications of the parameter do not impact the original argument. A value parameter refers to its own variable, one that is distinct from the corresponding argument. This variable is initialized by copying the value of the corresponding argument.

Короче, это "обычные параметры для типов-значений" и ничего страшного не произойдёт?

А то я чёта запутался во всяких архитектурах, так что азы позабыл и не втупляю.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905496
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42А то я чёта запутался во всяких архитектурах, так что азы позабыл и не втупляю.
зато философствуешь как настоящий
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905504
Вячеслав Д
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НемоКэп42,

Если тебе надо явно передать параметр по ссылке, тогда и указывай явно вот например
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void main()
{
   int d=0;
   aaa(ref d);//После выполнения этой команды переменная d будет равна тому что было сделано в этом методе
   
}
void aaa (ref int a1)
{
  a1=какие то действия;
}
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905516
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилНемоКэп42А то я чёта запутался во всяких архитектурах, так что азы позабыл и не втупляю.
зато философствуешь как настоящийсантехник?
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905535
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ДНемоКэп42,

Если тебе надо явно передать параметр по ссылке, тогда и указывай явно вот например
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void main()
{
   int d=0;
   aaa(ref d);//После выполнения этой команды переменная d будет равна тому что было сделано в этом методе
   
}
void aaa (ref int a1)
{
  a1=какие то действия;
}


Я свойство передаю в метод.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905539
Вячеслав Д
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НемоКэп42,

Да передавай себе наздоровье свойство, если у свойства реализован метод set то работать будет также само как и с переменной
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905540
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИзопропилпропущено...

зато философствуешь как настоящийсантехник?
Увлекающийся сишарпом в свободное от работы время.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905541
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ДНемоКэп42,

Да передавай себе наздоровье свойство, если у свойства реализован метод set то работать будет также само как и с переменной
Свойства нельзя по ссылке передавать.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905542
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Вячеслав ДНемоКэп42,

Да передавай себе наздоровье свойство, если у свойства реализован метод set то работать будет также само как и с переменной
Свойства нельзя по ссылке передавать.
Делегатик городить, чтоли?
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905556
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Чем грозит вот такое использование локальной переменной value?Ничем. Всё в порядке, ВВП и РПЦ не запрещают такое использование параметров.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905587
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42НемоКэп42пропущено...

Свойства нельзя по ссылке передавать.
Делегатик городить, чтоли?Тебе что на самом деле нужно-то?
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905588
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое чувство, что тупо потрындеть не с кем :)
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905607
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42что я чего-то делаю с переданным значением и возвращаю эту же локальную переменную
Вообще то возвращаете вы не ту же переменную, а копию значения.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905767
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, там проблема немного в другом была. Сначала я хотел сделать так:

Код: 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.
  public class Model
    {
        public int A { get; set; }
        public int B { get; set; }
    }

    public class ViewModel
    {
        Model _model;

        public int A
        {
            get { return _model.A; }
            set { _model.A = value; }
        }

        public int B
        {
            get { return _model.B; }
            set { _model.B = value; }
        }

        public void Do(ref int val)
        {
            val *= 2;
        }

        public void Handler(int variant)
        {
            switch (variant)
            {
                case 1: Do(ref A); break;
                case 2: Do(ref B); break;
                default: break;
            }
        }
    }



Мне надо было менять значения свойств модели через одну и ту же функцию Do, т. к. код в ней однотипный для многих свойств модели (конечно, сложнее, чем я тут написал).

Но он написал, что по ссылке свойства передавать нельзя. Пришлось сделать через возврат:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        public int Do(int val)
        {
            return val *= 2;
        }

        public void Handler(int variant)
        {
            switch (variant)
            {
                case 1: A = Do(A); break;
                case 2: B = Do(B); break;
                default: break;
            }
        }



Это нормально? Чёта как-то много, по-моему, понаписано ради простой цели - просто сделать однотипную обработку многих свойств. Может, можно как-то проще?

При этом засунуть вызов Do в сеттер свойств я не могу - эти свойства не только с Do используются.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905798
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Это нормально? Чёта как-то много, по-моему, понаписано ради простой цели - просто сделать однотипную обработку многих свойств. Может, можно как-то проще?

При этом засунуть вызов Do в сеттер свойств я не могу - эти свойства не только с Do используются.
Ненормально уже хотя бы потому что _model не инициализируется, а значит что при обращении к гетеру или сетеру A и B в объекте класса ViewModel будет выбрасываться NullReferenceException.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905818
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Но он написал, что по ссылке свойства передавать нельзя.


Дык свойства - это методы фактически

Может, можно как-то проще?


Куда уж проще
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905879
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronНемоКэп42Это нормально? Чёта как-то много, по-моему, понаписано ради простой цели - просто сделать однотипную обработку многих свойств. Может, можно как-то проще?

При этом засунуть вызов Do в сеттер свойств я не могу - эти свойства не только с Do используются.
Ненормально уже хотя бы потому что _model не инициализируется, а значит что при обращении к гетеру или сетеру A и B в объекте класса ViewModel будет выбрасываться NullReferenceException.
Всё инициализируется на самом деле. Я не стал просто весь код приводить. Написал только ту часть, где у меня вопрос.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905891
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42,
Посколько всего кода не видно и все работает как надо, то нормально.
...
Рейтинг: 0 / 0
Возвращение из метода передаваемой параменной - это нормально?
    #38905903
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёта как-то так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        public void Do(Action<int> setter, int val)
        {
            setter(val *= 2);
        }

        public void Handler(int variant)
        {
            switch (variant)
            {
                case 1: Do(v => A = v, A); break;
                case 2: Do(v => B = v, B); break;
                default: break;
            }
        }



Полный компилирующийся и выполняющийся пример

Код: 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.
69.
  public class Model
    {
        public int A { get; set; }
        public int B { get; set; }
    }

    public class ViewModel
    {
        Model _model;

        public int A
        {
            get { return _model.A; }
            set { _model.A = value; }
        }

        public int B
        {
            get { return _model.B; }
            set { _model.B = value; }
        }

        public ViewModel(Model model)
        {
            _model = model;
        }

        public void Do(Action<int> setter, int val)
        {
            setter(val *= 2);
        }

        public void Handler(int variant)
        {
            switch (variant)
            {
                case 1: Do(v => A = v, A); break;
                case 2: Do(v => B = v, B); break;
                default: break;
            }
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Model m = new Model();
            m.A = 2;

            ViewModel vm = new ViewModel(m);

            Console.WriteLine(vm.A);
            Console.WriteLine(vm.B);

            vm.Handler(1);

            Console.WriteLine(vm.A);
            Console.WriteLine(vm.B);

            vm.Handler(2);

            Console.WriteLine(vm.A);
            Console.WriteLine(vm.B);

            Console.ReadLine();
        }
    }



Но, конечно, первый вариант был попроще.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Возвращение из метода передаваемой параменной - это нормально?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]