加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

WPF基础到企业应用系列7――深入剖析依赖属性(一)

发布时间:2020-05-23 06:59:20 所属栏目:程序设计 来源:互联网
导读:一. 摘要 首先圣殿骑士很高兴这个系列能得到大家的关注和支持,这个系列从七月份开始到现在才第七篇,上一篇发布是在8月2日,掐指一算有二十多天没有继 续更新了,最主要原因一来是想把它写好,二来是因为最近几个月在筹备“云计算之旅”系列,所以一再推迟了

一. 摘要

  首先圣殿骑士很高兴这个系列能得到大家的关注和支持,这个系列从七月份开始到现在才第七篇,上一篇发布是在8月2日,掐指一算有二十多天没有继 续更新了,最主要原因一来是想把它写好,二来是因为最近几个月在筹备“云计算之旅”系列,所以一再推迟了发布进度。之前一直都没有想过要录制视频,主要的 原因还是怕自己知识有限,从而误导他人,所以前几次浪曦和51CTO邀请录制视频,我都以工作忙、公司内部培训需要时间和自己有待提高等理由委婉的拒绝 了,说实在的,自己也知道自己还有很多地方有待提高,还需要向各位学习,所以这几年都会一直努力,相信总有一天自己头上也会长出两只角的。录制视频的事也 就这样不了了之了,直到前一段时间MSDN WebCast的再三邀请,我才决定努力试一试,同时也希望各位能够支持,现在都把社区当成自己的坚强后盾了,所以我打算先以博客的形式发布,这样就可以 先和大家一起讨论,纠正自己的某些错误认识,这样在录制视频的时候就不会误导他人了。

  前几篇我们讲了WPF的一些基本知识,但是始终没有接触最核心的概念,那么从这篇文章开始的下面几篇文章中,我们会分别深入讨论一下依赖属性、 路由事件、命令和绑定等相关概念,希望这几篇文章对大家能有所帮助。由于自己才疏学浅且是对这些技术的使用总结和心得体会,错误之处在所难免,怀着技术交 流的心态,在这里发表出来,所以也希望大家能够多多指点,这样在使一部分人受益的同时也能纠正我的错误观点,以便和各位共同提高。

  这篇文章比较多,在开篇之前我们会先介绍比本篇更重要的一些东西,然后插播一段“云计算之旅”的广告(

WPF基础到企业应用系列7――深入剖析依赖属性(一)

这里广告费比较贵哟!),作为最近几个月执着研究的东西,终于可以和大家见面了,希望自己能从实践中深入浅出的讲明白。在前面的两个内容之后我们正式进入 本篇的主题——依赖属性。依赖属性是WPF的核心概念,所以我们花费了大量的时间和篇幅进行论述,首先从依赖属性基本介绍讲起,然后过渡到依赖属性的优先 级、附加属性、只读依赖属性、依赖属性元数据、依赖属性回调、验证及强制值、依赖属性监听、代码段(自动生成) 等相关知识,最后我们会模拟一个WPF依赖属性的实现,来看看它里面的内部究竟是怎样处理的,这样就可以帮助我们更好的认清它的本质,出现问题的时候我们 也可以根据原理快速找到原因了。

二. 本文提纲

· 1.摘要

· 2.本文提纲

· 3.比这篇文章更重要的东西

· 4.云计算广告插播

· 5.依赖属性基本介绍

· 6.依赖属性的优先级

· 7.依赖属性的继承

· 8.只读依赖属性

· 9.附加属性

· 10.清除本地值

· 11.依赖属性元数据

· 12.依赖属性回调、验证及强制值

· 13.依赖属性监听

· 14.代码段(自动生成)

· 15.模拟依赖属性实现

· 16.本文总结

· 17.相关代码下载

· 18.系列进度

三. 比这篇文章更重要的东西

  在讲这篇文章之前,我们先来聊一点更重要的东西,正所谓“授人与鱼不如授人以渔”,那么我们这个“渔”究竟是什么呢?大家做软件也有不少年了, 对自己擅长的一门或多门技术都有自己的经验和心得,但总的来说可以分为向内和向外以及扩展三个方面(这里只针对.NET平台):

(一)向外:

  会使用ASP.NET、WinForm、ASP.NET MVC、WPF、Silverlight、WF、WCF等技术,在用这些技术做项目的同时积累了较丰富的经验,那么大家就可以形成自己的一套开发知识库, 知道这些技术怎么能快速搭建企业所需要的应用、知道这些技术在使用中会出现什么样的问题以及如何解决。那么在这个时候你就可能已经在团队中起到比较核心的 作用,如果项目经理给你一个任务,你也可以很轻松且高效的胜任,同时在项目当中由于你也比较清楚业务逻辑,所以当机会来临的时候,你很快会成为团队的骨 干,逐渐你就会带几个初级一点的工程师一起做项目;如果你不喜欢带团队,你就会成为资深的高级开发或者架构师。那么在向外方面我个人认为最重要的是积累经 验,对常见的应用要比较熟悉且有自己总结的一套开发库——比如对普通的网站、电子商务系统、ERP、OA、客户端应用等等有比较丰富的经验。

(二)向内:

  在前面你使用了这些技术开发项目之后,你会遇到很多问题,为了解决这些问题,你会逐渐研究一些比较底层次的东西。比如对于ASP.NET,你会 逐渐的去深入理解ASP.NET的整个处理过程、页面的生命周期、自定义控件的开发等等,由于自己最初是由C、C++、Java这样过渡到.NET的,所 以对一些细节总喜欢钻牛角尖,这也浪费了不少时间,但同时也得到了很多意外之喜。

对于C#语言上,你也会逐渐去刨根问底,想看看这些语法糖背后到底隐藏着什么秘密,很多对.NET技术比较痴迷的人都会选择对C# 1.0 语言通过IL代码来深层次认识,然后对C#2.0、C#3.0、C#4.0都编译为C# 1.0 来学习,这样他们就能认识到语言的内部到底是怎么执行的,正所谓知道的同时也知道其所以然。

对于WF,你不仅要知道各 Activity的使用,你也得知道其内部的原理,比如WF 内部就是依靠依赖属性来在工作流中的各 Activity 间传递属性值的,如果你细心,你还原WF的依赖属性源码,你会发现它和WPF、Silverlight中的依赖属性大同小异,原理基本一样、只是针对特定 技术进行了适当的调整。

对于数据底层操作也一样,不管你是用的拼接SQL、存储过程、IBATIS.NET、Nhibernate,Active Record,Linq to sql、Entity framework还是自己开发的ORM组件,你得明白它内部的原理,你要知道这些开源的代码还是很值得研究的,我的经验是先熟练使用这些功能,然后再剖 析它的源码,然后自己写一套自己的框架,现在我也在精简自己的ORM框架,因为之前把重点放在了实现尽可能多的功能,所以对性能等细节没有做过多优化,后 面也会向大家慢慢学习。

对WPF和Silverlight一样,你不仅要知道怎么用这些技术,你要知道它的原理,比如对依赖属性,你知道它的内部原理,就可以对平时出现的 诸如我设置的值怎么没有起作用、我Binding的元素怎么没有出现等等问题; 对路由事件,你也会经常遇到我的事件怎么没有执行、我的自定义控件事件怎么处理不对、路由传递怎么没有起作用等等,这个时候你如果深入理解了路由事件的内 部处理,这些问题就迎刃而解了;对WPF和Silverlight新多出来的命令特性,大家很多时候也是比较疑惑,也会遇到命令失效等等问题,其实如果你 深入的了解了它的原理,你就会知道,它其实在内部也是事件,只不过微软在里面做了很多封装而已;对Binding就更是如此,我们也不想在这篇文章谈开 去,毕竟在下面的几篇文章会详细的对这些技术进行涉及。

(三)扩展:

  通过前面的向内和向外的修炼以后,接下来要做的就是不断实践,不断总结经验,在这个过程中更重要的是要懂得分享,有分享才会使自己和他人共同提 高,有分享才能让自己摆脱狂妄的井底之蛙思想,还记得自己刚做技术的一两年里,天天喜欢提及大型架构、大型数据处理、操作系统底层代码如何如何,甚至把 AOP、IOC、SSH、OO及设计模式、SOA等词语时常挂在嘴边,生怕别人不知道自己不懂。但随着自己技术实质上的提高以及经验的积累,自己也就逐渐 成熟起来,对这些技术逐渐深入理解且理解了其内部实现原理,这样反而自己变得谦虚起来了,对之前的那些思想感到无比的羞愧。同时也明白自己在慢慢成长了, 现在都习惯戏称自己为打杂工,其实更多时候用打字员会合理一些,所以希望大家能多多指教,这样我才能更快地摆脱打字员的生活。我在这里也对扩展做一点小的 总结:

记录学习:这是学习很重要的一步,你不一定要写技术博客,你也可以做一些例子来记录,你也可以在学习之后写一个总结,毕竟人的精力十分有限,在很多时候,它并不能像硬盘一样存储起来就不会丢失,更多的时候它更像一块内存。

同道交流:在这一层里我觉得最重要的就是和一些技术较好的人成为朋友,和他们经常探讨一些技术,这样可以缩短学 习的周期,同时也能快速的解决问题,毕竟人的精力十分有限,你没有遇到过的问题,说不定其他人遇到过。在这方面自己也体会颇深,也很感谢之前几个公司及现 在公司的同事、社区朋友以及一些志同道合之士,感谢你们的指点,没有你们的指点,我也不可能从小鸟进化成逐鹿程序界的菜鸟,我也为自己能成为一只老菜鸟感 到自豪!

少考证、多务实:在扩展的这一层里,我们要谨记不要为了考证而去考证,那样是没有任何实际作用的。对MVP也一 样,一切顺其自然为好,记得大学时候身边就有人连续四次荣获MVP称号,这叫我在当时是相当的佩服,在佩服之余我们要切记务实,没有务实的东西都是很虚拟 飘渺的。还记得自己当初在大学里面受到考证风气的影响,神经兮兮的去考过了什么国家计算机四级和MCP等一大堆证件,后来到公司面试兴高采烈拿着20多张 证书,才知道那些东西根本就没有什么价值,反而让自己去学习了最不喜欢的技术,同时也给自己挂上了考证族的名号。所以后来总结就是劳民伤财、徒添伤悲!

技术分享:在自己公司及其他公司进行一些技术培训或者讨论,其实重要的不是什么荣誉,而是在把这个培训看成是一 些技术交流和分享,因为在这个过程中,你可能会重新认识你所掌握的技术、你可能会遇到一些志同道合的人、你可能会在分享过程中纠正以前的错误认识、你可能 会在各方面得到提高从而完善自己的知识体系,但是最重要的是你要认真对待每一次培训,知之为知之不知为不知,不要不能教导他人反而误导了他人。记得有一次 在公司培训OO与设计模式,我知道这个专题想在一下午的时间把它讲清楚是非常困难的,这个不像之后培训的WPF、WCF和Silverlight那么单 纯,并且每个人的基础都不一样,当中有还没有毕业的实习生、刚毕业不久的毕业生、工作了数年的工程师及技术大牛们,所以如何把这些知识很好的插入到每个人 的知识树上面成了我考虑的重点。同时我的心里也比较矛盾,一方面希望参加培训的同事多一些,另一方面希望人越少越好。前者则是按照常理来考虑的,毕竟培训 者都希望自己培训,越受欢迎越好,这样才能使自己的思想得到更多人的认可,自己也能实现分享知识的目的。后者则是担心怕讲不好,少一点人就少一点罪过。可 是恰巧这一次是历次培训中最多的一次,来参加培训的同事有一百多人,不过幸好由于会议室坐不下,才分成了两批,这样就可以让我具备了更充分的时间和更好的 心态。总之培训是向内和向外的提炼与升华,正所谓“自己理解的知识未必能使人家理解”,这不仅考验的是技术,还考验了一个人的综合能力。

(四)结论:

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读