《深入浅出WPF》读后感
类的作用只是把散落在程序中的变量和函数进行归档封装并控制对它们的访问而已。
就拿C#语言的编译器来说,同样一段代码,如果在编译时使用了/t:exe参数,那么将编译出一个命令行程序(Console Application),如果把/t:exe换成/t:winexe,则编译结果是一个图形用户界面程序(GUI Application),如果把/t:winexe换成/t:library,则编译结果是一个动态链接库(Dynamic Link Library, DLL)。
使用partial关键字,可以把一个类分拆在多处定义,只要各部分代码不冲突即可。
Button之所以是Button不是因为它长得方方正正、显示一串文字并且能够响应用户单击,而是应该倒过来想——凡是符合“能显示一些提示内容(可以是文字,也可以是图片、动画甚至视频)并能响应用户单击”这一抽象概念的UI元素都可以是Button,至于一个Button具体长成什么样子(是方是圆、是显示文字还是显示动画)完全由它的风格(Style)和模板(Template)来决定;CheckBox之所以是CheckBox也不是因为它有一个Box可供你Check——只要是用来显示一个bool类型值并允许用户通过单击来切换true/false/null的UI元素,那它就是一个CheckBox。
判断一种编程语言精良与否,很重要的一个原则就是程序员使用起来是不是得心应手。XAML在这方面做的很好,在表达UI元素和元素内容时的语法非常灵活,于情于理都说得过去。
Binding进行校验时的默认行为是认为来自Source的数据总是正确的,只有来自Target的数据(因为Target多为UI控件,所以等价于用户输入的数据)才有可能有问题,为了不让有问题的数据污染Source所以需要校验。换句话说,Binding只在Target被外部方法更新时校验数据,而来自Binding的Source数据更新Target时是不会进行校验的。
程序的本质就是“数据+算法”,或者说是用算法来处理数据以期得到输出结果。在程序中,数据表现为各种各样的变量,算法则表现为各种各样的函数(操作符是函数的简记法)。即使是到了面向对象时代有了类等数据结构的出现,这一本质仍然没有改变——类的作用只是把散落在程序中的变量和函数进行归档封装并控制对它们的访问而已。
Windows本身就是一种消息驱动的操作系统,所以我们的程序注定都是消息驱动的,程序运行的时候也要把自己的消息系统与整个操作系统的消息系统“连通”才能够被执行和响应。
事件的订阅关系:事件的拥有者可以随时激发事件,但事件发生后会不会得到响应要看有没有事件的响应者,或者说要看这个事件是否被关注。如果对象A关注对象B的某个事件是否发生,则称A订阅了B的事件。更进一步讲,事件实际上是一个使用event关键字修饰的委托(Delegate)类型成员变量,事件处理器则是一个函数,说A订阅了B的事件,本质上就是让B.Event与A.EventHandler关联起来。所谓事件激发就是B.Event被调用,这时,与其关联的A.EventHandler就会被调用。
软件项目成功与否的三个要素是:资源、成本、时间。无论是为了在竞争中保持不败还是为了激发起用户对软件的兴趣,提高软件界面的美化程度、恰当地将动画和3D等效果引入应用程序都是一个必然趋势。