动态对象的赋值如何在C#中工作?

时间:2012-09-12 17:45:57

标签: c#

在ASP.NET MVC中,属性ViewBag属于动态类型。

Throught the codeViewBag的各种“属性”被分配到:

ViewBag.Message = "Hello world";
ViewBag.Title = "Page title";

这是如何工作的?从阅读docs我得到ViewBag本身可以做什么,但为什么(或如何)为动态类型工作的“成员”分配东西?

以下是ViewBag类中public abstract class ControllerBase : IController的定义方式:

 [Dynamic]
 public dynamic ViewBag { get; }
 //
 // Summary:
 //     Gets or sets the dictionary for view data.
 //
 // Returns:
 //     The dictionary for the view data.
 public ViewDataDictionary ViewData { get; set; }

好奇。

相关问题: Where can I find the official documentation for DynamicViewDataDictionary?

2 个答案:

答案 0 :(得分:4)

ViewBagExpandoObject或类似的东西。这基本上只是一个美化的词典,其中“属性”是关键。

<强>更新
实际上,它是一个DynamicViewDataDictionary,一个ASP.NET MVC源代码内部的类。此类继承自DynamicObject,如果ViewDataDictionary属于ViewBag ViewData属性ControllerBase,则只是TryGetMember的包装。 正如您在TrySetMemberViewData中看到的那样,调用将被委托给{{1}}而没有任何逻辑。

答案 1 :(得分:0)

“Visual C#2010引入了一种新的动态类型。类型是静态类型,但动态类型的对象绕过静态类型检查。在大多数情况下,它的功能类似于它具有类型对象。在编译时,一个元素键入为动态的假定支持任何操作。因此,您不必担心对象是从COM API,动态语言(如IronPython),HTML文档对象模型(DOM)获取其值,从反射,或从程序中的其他地方。但是,如果代码无效,错误将在运行时捕获。“

http://msdn.microsoft.com/en-us/library/dd264736.aspx