Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / var & dynamic / 25 сообщений из 25, страница 1 из 1
06.02.2017, 22:03
    #39399675
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    class A
    {
        public int M(dynamic s)
        {
            return 5;
        }
    }

    static class Program
    {
        static void Main(string[] args)
        {
            var z = 1;
            var s = new A().M(z);
            Console.WriteLine("{0} {1}", s, s.GetType());

            dynamic zz = 5;
            var ss = new A().M(zz);
            Console.WriteLine("{0} {1}", ss, s.GetType());
        }
    }

Почему тип переменной ss определяется как dynamic ?
...
Рейтинг: 0 / 0
06.02.2017, 22:18
    #39399680
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
refreg, вы что-то путаете/ошибаетесь/недоговариваете... в вашем примере, даже если исправить s на ss - Int32
...
Рейтинг: 0 / 0
06.02.2017, 22:26
    #39399681
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
buser,

в интелисенсе посмотри

ЗЫ. Ошибся в Console.WriteLine когда тестовый пример делал.
...
Рейтинг: 0 / 0
06.02.2017, 22:29
    #39399684
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
...
Рейтинг: 0 / 0
06.02.2017, 22:54
    #39399697
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
LRrefreg,

type dynamic exists only at compile time, not at run time

Конкретнее здесь, в секции - Overload Resolution with Arguments of Type dynamic :
Overload resolution occurs at run time instead of at compile time if one or more of the arguments in a method call have the type dynamic, or if the receiver of the method call is of type dynamic.

Т.е., обычные издержки работы с dynamic ))
...
Рейтинг: 0 / 0
07.02.2017, 06:12
    #39399753
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
А мне тоже непонятно, почему тип ss динамик, хотя возврат метода М, который присваивается ss, интовый.
...
Рейтинг: 0 / 0
07.02.2017, 08:54
    #39399787
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
BowieА мне тоже непонятно, почему тип ss динамик, хотя возврат метода М, который присваивается ss, интовый.
Типа dynamic не существует в run-time, это своего рода "соглашение" для compile-time - что выражение будет разрешаться в run-time. Это "соглашение" (что в compile-time результат выражения "неопределен") распространяется и на вызов метода, когда в качестве параметра передается dynamic, независимо от сигнатуры метода.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    class A
    {
        public int M(int s) // int !!!
        {
            return 5;
        }
    }
...
            var z = 1;
            dynamic zz = 5;
            var ss = new A().M(zz); // dyn
            ss.CheckIsDynamic();
            var ss2 = new A().M((dynamic)z); // dyn
            ss2.CheckIsDynamic();
            var ss3 = new A().M((int)zz); // int
            //ss3.CheckIsDynamic();
            int ss4 = new A().M(zz); // )))


Очевидно, что intellisense вполне согласуется с "соглашением" dynamic.
...
Рейтинг: 0 / 0
07.02.2017, 13:01
    #39399989
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
LR,

т. е. соглашение, что у метода М есть тип возврата int идёт лесом? А каким образом тип параметра замещает собой тип возврата? Где логика? Я в упор не вижу логики.

LRЭто "соглашение" (что в compile-time результат выражения "неопределен")
Какого выражения? Параметр М не участвует в вычислении возвращаемого параметра - каким образом этот параметр может влиять на тип возпрата?
...
Рейтинг: 0 / 0
07.02.2017, 13:03
    #39399992
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Если бы было
Код: c#
1.
return s * 5;

или ещё чего подобного - т. е. чтобы параметр участвовал в вычислении возврата, то я бы понял, а соглашение, что "при любых раскладах, если параметр dynamic, то и возврат будет dynamic, даже если параметр вообще не используется" я не понимаю.
...
Рейтинг: 0 / 0
07.02.2017, 13:08
    #39399999
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Ну и вроде я где-то читал соглашение, что dynamic служит для сопряжения C# с другими языками, в частности, с динамической типизацией. Использовать dynamic чисто внутри C# является очень плохой практикой, и для подобных целей в нём есть дженерики.
...
Рейтинг: 0 / 0
07.02.2017, 13:09
    #39400006
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Так же как и приведение всего к object или string, а потом приведение обратно в нужный тип - это всё путь в ад.
...
Рейтинг: 0 / 0
07.02.2017, 13:20
    #39400024
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
BowieКакого выражения? Параметр М не участвует в вычислении возвращаемого параметра - каким образом этот параметр может влиять на тип возпрата? Например, вот так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    class A
    {
        public int M(int s)
        {
            return 5;
        }
        public short M(short s)
        {
            return 5;
        }
        public string M(string s)
        {
            return "5";
        }
    }


BowieНу и вроде я где-то читал соглашение, что dynamic служит для сопряжения C# с другими языками, в частности, с динамической типизацией. Использовать dynamic чисто внутри C# является очень плохой практикой, и для подобных целей в нём есть дженерики. Угу.
...
Рейтинг: 0 / 0
07.02.2017, 17:44
    #39400321
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
LR,

не понял с перегруженным методом М. Какой бы я параметр не послал в любую перегрузку, а он не участвует в образовании возврата. Почему возврат имеет тип dynamic?

Вы могли бы переписать перегруженные методы одним методом, где бы через метод GetType получили бы несколько кейсов и вернули бы значение нужного типа? Такой вариант тоже сработал бы?
...
Рейтинг: 0 / 0
07.02.2017, 17:46
    #39400324
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
LR,

вы несколько перегрузок привели, чтобы показать, как использовать dynamic?
...
Рейтинг: 0 / 0
07.02.2017, 17:55
    #39400333
Bowie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
А, погодите. Логика такая: если у метода есть перегрузки, и хотя бы одна из них имеет тип dynamic, то невозможно определить во время компиляции, какая перегрузка будет вызвана и, следовательно, какой возврат будет. Верно? Т. е. во время компиляции для параметра типа dynamic подходит всё множество методов, и, следовательно, всё множество возвратов, которое обозначено через тот же типа dynamic?

Ну ладно, для перегруженных методов понятно. А почему даже с одним единственным методом у ТСа тоже возврат имеет тип dynamic? Ведь перегрузок у него нет. Может, это связано как-то с method group, который может состоять и из одного метода?
...
Рейтинг: 0 / 0
07.02.2017, 18:07
    #39400350
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Bowie,

BowieНу ладно, для перегруженных методов понятно. А почему даже с одним единственным методом у ТСа тоже возврат имеет тип dynamic? Ведь перегрузок у него нет. Может, это связано как-то с method group, который может состоять и из одного метода?Представь, что класс в другой сборке. Кто-то может добавить перегрузку.

BowieНу и вроде я где-то читал соглашение, что dynamic служит для сопряжения C# с другими языками, в частности, с динамической типизацией. Использовать dynamic чисто внутри C# является очень плохой практикой, и для подобных целей в нём есть дженерики.К сожалению, без dynamic при работе с COM не обойтись... И дженерики тут не помогут.
...
Рейтинг: 0 / 0
07.02.2017, 22:38
    #39400474
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Bowie,

повторю еще раз - "типа dynamic не существует в run-time" - думайте сами, решайте сами...
...
Рейтинг: 0 / 0
08.02.2017, 01:15
    #39400513
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
refregК сожалению, без dynamic при работе с COM не обойтись
да неужели?
...
Рейтинг: 0 / 0
08.02.2017, 09:57
    #39400637
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
ИзопропилrefregК сожалению, без dynamic при работе с COM не обойтись
да неужели?Не придирайся к словам...
...
Рейтинг: 0 / 0
09.02.2017, 12:49
    #39401541
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
refregИзопропилпропущено...

да неужели?Не придирайся к словам...
а к какому слову он придрался?
...
Рейтинг: 0 / 0
09.02.2017, 13:17
    #39401562
Benny Blanco
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
У меня-таки есть подозрение, что dynamic придумали, после того, как заколебались городить трехэтажный мат для взаимодействия через COM.
а var - послет того, как заколебались городить такой же трехэтажный мат для результатов Linq запросов.
...
Рейтинг: 0 / 0
09.02.2017, 14:48
    #39401653
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Benny BlancoУ меня-таки есть подозрение, что dynamic придумали, после того, как заколебались городить трехэтажный мат для взаимодействия через COM.

Что как бабка-угадка? Читай матчасть .
Benny Blancoа var - послет того, как заколебались городить такой же трехэтажный мат для результатов Linq запросов.
Как стал нужен и сделали вывод типов!
...
Рейтинг: 0 / 0
09.02.2017, 15:58
    #39401710
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Benny Blancoа var - послет того, как заколебались городить такой же трехэтажный мат для результатов Linq запросов.
Чушь какая. Пробуйте сгородить трехэтажный мат вместо var вот для для такого:
Код: c#
1.
var a = Enumerable.Range(1, 1).Select(n => new {Id = n}).First();
...
Рейтинг: 0 / 0
10.02.2017, 00:38
    #39401947
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
refregИзопропилпропущено...

да неужели?Не придирайся к словам...
COM - не обязательно IDispatch

IDispatch - тож не так страшно без dynamic (InvokeMember)
...
Рейтинг: 0 / 0
10.02.2017, 10:48
    #39402076
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
var & dynamic
Изопропил
IDispatch - тож не так страшно без dynamic (InvokeMember)
Или vb.net
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / var & dynamic / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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