dynamic 这种定义的属性是什么意思

a40528166 2016-12-07 12:56:17
private dynamic queryCondition;
public dynamic QueryCondition
{
get
{
if (queryCondition == null)
queryCondition = new ExpandoObject();
return queryCondition;
}
set
{
queryCondition = value;
this.RaisePropertyChanged("QueryCondition");
}
}
...全文
465 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
private ExpandoObject queryCondition; public ExpandoObject QueryCondition { get { if (queryCondition == null) queryCondition = new ExpandoObject(); return queryCondition; } ................... 这样的属性中的第一行 if 判断代码的功能说明:随时访问,都不会是 null。
a40528166 2016-12-08
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
比如说,你可以定义类型
    class A
    {
        public string X;
    }
然后写代码
    dynamic x = new A();
    x.X = "234";
    var result = x.X;
这时候,变量 x 和 result 都是 dynamic 定义。
好的 谢谢大神的耐心解答 get { if (queryCondition == null) queryCondition = new ExpandoObject(); return queryCondition; } 这个get访问器的作用是不是是这个属性可以直接使用了 不需要再在别处实例化了呢
a40528166 2016-12-07
  • 打赏
  • 举报
回复
好的 谢谢大神的耐心解答 get { if (queryCondition == null) queryCondition = new ExpandoObject(); return queryCondition; } 这个get访问器的作用是不是是这个属性可以直接使用了 不需要再在别处实例化了呢
  • 打赏
  • 举报
回复
但是编译器做了许多自动化处理 --> 但是编译器做了许多自动化生成工作 反射是会耗费几百倍的时间的,你应该知道这个道理。所以也不要滥用 dynamic,仅仅在必要的时候使用。例如跨平台的一些组件,由于性能瓶颈主要在于其它组件过于复杂、过于低效,而且天生就是数据类型不确定的,所以使得你的客户程序的编程也必须反射处理,这时候用 dynamic 就是简化代码的手段。 例如 ExpandoObject 就是一种非常灵活的数据类型。灵活性的缺点当然就是“不太靠谱”,经常在运行时、甚至运行了几百遍而在某个数据状态下才在用户面前丢人现眼地程序崩溃,而不能在编译时靠类型约束机制就检查出编程设计错误。 ExpandoObject用来承载灵活的结构化数据,那么你的 QueryCondition 属性就应该定义为 ExpandoObject 类型的(而不是声明 dynamic 的),这样你起码还能用 ExpandoObject 的父类(例如 IDictionary<string,object>)来更加明确和高效率地处理这个属性。 单从你贴出的代码来看,看不出为什么要定义为 dynamic。使用 dynamic 要谨慎,不要胡乱写什么“万能的”代码。因为这样既不能让编译器帮你检查编程错误,运行时也要付出几百倍以上的性能代价。越是胡乱写“万能代码”的人越不专业,真正专业的人都会只写出“恰好合适”的代码而不是更虚的代码。
  • 打赏
  • 举报
回复
比如说,你可以定义类型
    class A
    {
        public string X;
    }
然后写代码
    dynamic x = new A();
    x.X = "234";
    var result = x.X;
这时候,变量 x 和 result 都是 dynamic 定义。
  • 打赏
  • 举报
回复
dynamic 是反射的代名词,自从有了 dynamic,过去的许多关于“反射”的教程就都几乎是作废了、过时了。 dynamic 纠结于其静态表示,有点相当于 object。但是编译器做了许多自动化处理,帮你反射。
by_封爱 版主 2016-12-07
  • 打赏
  • 举报
回复
动态类型 运行时编译....好像就是这么回事吧..
华芸智森 2016-12-07
  • 打赏
  • 举报
回复
dynamic 是动态类型 。

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧