powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / var & dynamic
25 сообщений из 25, страница 1 из 1
var & dynamic
    #39399675
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
var & dynamic
    #39399680
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg, вы что-то путаете/ошибаетесь/недоговариваете... в вашем примере, даже если исправить s на ss - Int32
...
Рейтинг: 0 / 0
var & dynamic
    #39399681
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

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

ЗЫ. Ошибся в Console.WriteLine когда тестовый пример делал.
...
Рейтинг: 0 / 0
var & dynamic
    #39399684
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
var & dynamic
    #39399697
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
var & dynamic
    #39399753
Bowie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне тоже непонятно, почему тип ss динамик, хотя возврат метода М, который присваивается ss, интовый.
...
Рейтинг: 0 / 0
var & dynamic
    #39399787
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
var & dynamic
    #39399989
Bowie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

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

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

или ещё чего подобного - т. е. чтобы параметр участвовал в вычислении возврата, то я бы понял, а соглашение, что "при любых раскладах, если параметр dynamic, то и возврат будет dynamic, даже если параметр вообще не используется" я не понимаю.
...
Рейтинг: 0 / 0
var & dynamic
    #39399999
Bowie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вроде я где-то читал соглашение, что dynamic служит для сопряжения C# с другими языками, в частности, с динамической типизацией. Использовать dynamic чисто внутри C# является очень плохой практикой, и для подобных целей в нём есть дженерики.
...
Рейтинг: 0 / 0
var & dynamic
    #39400006
Bowie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же как и приведение всего к object или string, а потом приведение обратно в нужный тип - это всё путь в ад.
...
Рейтинг: 0 / 0
var & dynamic
    #39400024
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
var & dynamic
    #39400321
Bowie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

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

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

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

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

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

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

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

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

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

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

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


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