встроенный экземпляр нового объекта - PullRequest
1 голос
/ 14 декабря 2011

NEWBIE, Новичок, вопрос новичка, извините.Я только начал программировать на C # (давно пришедший из строго типизированного мира c ++).Забавно вернуться к программированию, но я вижу в файле global.asax метод route.MapRoute, который принимает какой-то нетипизированный объект в качестве третьего и четвертого параметра.Оба экземпляра созданы одинаково, но, возможно, как два разных типа.

route.MapRoute( p1, p2, new { controller = "Home", Action = "Index" }, new {} );

Удивительно, но все работает хорошо.Но теперь я хочу получить доступ к 3-му параметру в помощнике, и он входит как тип объекта.У меня нет проблем с приведением типа объекта к какому-либо типу объекта, но я понятия не имею, как это было реализовано (и при этом я не могу найти никаких документов, которые говорят больше, чем объект).В том же духе, откуда он знает, как иметь дело с чем-то вроде «контроллера», который существует внутри типизированного / нетипизированного объекта?Теперь у меня есть неизвестный тип объекта с неизвестными / меняющимися типами свойств внутри.Я бы догадался, вар?

Так же, как комментарий к этим допущениям, сделанным компилятором, когда я вижу примеры модульных тестов, созданных просто для того, чтобы убедиться, что свободно напечатанный материал включен и правильно написан и набран, я теряю уверенность в значениислабо типизированный подход.Я что-то пропустил?

1 Ответ

2 голосов
/ 14 декабря 2011

метод route.MapRoute, который принимает какой-либо нетипизированный объект

Это не нетипизированный объект; у объекта есть тип, только это анонимный тип .

откуда он знает, как обращаться с чем-то вроде «контроллера», который существует внутри типизированного / нетипизированного объекта?

Осматривает объект, используя Отражение

Но теперь я хочу получить доступ к третьему параметру помощника, и он входит как тип объекта. У меня нет никаких проблем с приведением типа объекта к какому-либо типу объекта, но я не имею понятия, что это был экземпляр как

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

Просто чтобы прояснить: использование анонимных типов не «ломает» строгую типизацию. Просто в некоторых случаях вам нужен только тип в одном месте, поэтому вы не хотите объявлять тип, который будете использовать только один раз. В случае метода MapRoute использование анонимного типа - это просто удобство, так как проще объявить экземпляр анонимного типа, чем вручную создать словарь (список пар ключ / значение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...