Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Возвращение из метода передаваемой параменной - это нормально? / 19 сообщений из 19, страница 1 из 1
16.03.2015, 06:26
    #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
16.03.2015, 08:55
    #38905496
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращение из метода передаваемой параменной - это нормально?
НемоКэп42А то я чёта запутался во всяких архитектурах, так что азы позабыл и не втупляю.
зато философствуешь как настоящий
...
Рейтинг: 0 / 0
16.03.2015, 09:06
    #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
16.03.2015, 09:19
    #38905516
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращение из метода передаваемой параменной - это нормально?
ИзопропилНемоКэп42А то я чёта запутался во всяких архитектурах, так что азы позабыл и не втупляю.
зато философствуешь как настоящийсантехник?
...
Рейтинг: 0 / 0
16.03.2015, 09:41
    #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
16.03.2015, 09:43
    #38905539
Вячеслав Д
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращение из метода передаваемой параменной - это нормально?
НемоКэп42,

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

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

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

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

Свойства нельзя по ссылке передавать.
Делегатик городить, чтоли?Тебе что на самом деле нужно-то?
...
Рейтинг: 0 / 0
16.03.2015, 10:32
    #38905588
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращение из метода передаваемой параменной - это нормально?
Такое чувство, что тупо потрындеть не с кем :)
...
Рейтинг: 0 / 0
16.03.2015, 10:49
    #38905607
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращение из метода передаваемой параменной - это нормально?
НемоКэп42что я чего-то делаю с переданным значением и возвращаю эту же локальную переменную
Вообще то возвращаете вы не ту же переменную, а копию значения.
...
Рейтинг: 0 / 0
16.03.2015, 12:34
    #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
16.03.2015, 12:57
    #38905798
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращение из метода передаваемой параменной - это нормально?
НемоКэп42Это нормально? Чёта как-то много, по-моему, понаписано ради простой цели - просто сделать однотипную обработку многих свойств. Может, можно как-то проще?

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


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

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


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

При этом засунуть вызов Do в сеттер свойств я не могу - эти свойства не только с Do используются.
Ненормально уже хотя бы потому что _model не инициализируется, а значит что при обращении к гетеру или сетеру A и B в объекте класса ViewModel будет выбрасываться NullReferenceException.
Всё инициализируется на самом деле. Я не стал просто весь код приводить. Написал только ту часть, где у меня вопрос.
...
Рейтинг: 0 / 0
16.03.2015, 13:58
    #38905891
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возвращение из метода передаваемой параменной - это нормально?
НемоКэп42,
Посколько всего кода не видно и все работает как надо, то нормально.
...
Рейтинг: 0 / 0
16.03.2015, 14:05
    #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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Возвращение из метода передаваемой параменной - это нормально? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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