摘要: 源码下载:http://www.tracefact.net/SourceCode/MoreDelegate.rarC#中的委托和事件(续)引言如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识。但那些远不是委托和事件的全部内容,还有很多的地方没有涉及。本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。为什么要使用事件而不是委托变量?在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点,事 阅读全文
posted @ 2013-06-26 10:55 三叶草╮ 阅读(250) 评论(0) 推荐(0)
摘要: 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。 DllImport所在的名字空间 using System.Runtime.InteropServices; MSDN中对DllImportAttribute的解释是这样的:可将该属性应用于方法。DllImportAttribute 属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供包含入口 阅读全文
posted @ 2013-06-21 17:49 三叶草╮ 阅读(643) 评论(0) 推荐(0)
摘要: 引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问 阅读全文
posted @ 2013-06-19 15:26 三叶草╮ 阅读(328) 评论(0) 推荐(0)
摘要: 下面做一些简要的说明。1.单例模式(Singleton Pattern),又称作单件模式,当然也有一种诙谐的称谓:单身模式。在经典的GoF所著的《Design Patterns》一书中,对单例模式有着详尽的介绍,这本书网上有全文版本。2.单例模式的意图是保证一个类仅有一个实例,并且要提供一个全局访问点来访问这个实例。通常这个全局访问点是一个静态方法或者C#中的一个属性。3.在C#中,典型的单例模式实现方法可以如下:public class Manager{private static Manager Mgr;//constructor must be privateprivate Manage 阅读全文
posted @ 2013-06-18 11:51 三叶草╮ 阅读(1345) 评论(0) 推荐(0)
摘要: Predicate在集合搜索和WPF数据绑定中用途广泛,其调用形式: 调用形式:Predicate(Method)/Predicate(方法) 1.表示泛型,可以接受任何类型的参数 2.(Method)可以接受方法为参数进行传递,表示一个委托 ... 阅读全文
posted @ 2013-06-18 11:09 三叶草╮ 阅读(500) 评论(0) 推荐(0)
摘要: 在Windows中,诸如窗体绘制等功能由GDI实现,放在操作系统内核中。Windows Forms在底层使用的是GDI+。GDI+是GDI的“面向对象包装”,使用C++实现。.NET Windows Forms应用程序中使用的GDI+其实是在C++实现的非托管代码之上又包了一层,从而让我们能使用C#这样的托管编程语言调用GDI+功能绘图。WPF底层使用的是DirectX,就是通常用来开发游戏的那个DirectX。WPF与Windows Forms这两者并没有什么关系。按照微软的意图,WPF是用来取代Windows Form的,所以最新的Visual Studio就使用了WPF开发界面,这是一个 阅读全文
posted @ 2013-06-08 10:58 三叶草╮ 阅读(350) 评论(0) 推荐(1)
摘要: RelayCommand本来是WPF下面用的一种自定义的command,主要是它用到了事件管理函数,这个SL下面是没有的。不过这部分代码如果修改一下,也可以在SL下面使用,和WPF下面的实现思路差不多。先看下RelayCommand的定义,一共有2种。 1 public class RelayCommand<T> : ICommand 2 { 3 public RelayCommand(Action<T> execute) 4 : this(execute, null) 5 { 6 } 7 8 ... 阅读全文
posted @ 2013-06-07 16:29 三叶草╮ 阅读(906) 评论(0) 推荐(0)
摘要: 查了不少资料,大概理清楚的就是有3种。当然类名可以自己取了,不过为了便于记忆和区分,还是和看到的文章里面用一样的类名。1.DelegateCommand2.RelayCommand3.AttachbehaviorCommand因为MVVM模式适合于WPF和SL,所以这3种模式中也有一些小差异,比如RelayCommand下面的CommandManager方法就是WPF下面的,SL下面无法使用,不过我认为这3种方法中的基本思路都如出一辙,都是出自那位外国牛人的文章里面。主要的区别在于和VIEW中的控件的绑定使用上。有点不同的attachbehaviorcommand是prism4里面的一种设计模 阅读全文
posted @ 2013-06-07 16:28 三叶草╮ 阅读(553) 评论(0) 推荐(0)
摘要: 在讲述自定义命令之前,先了解一下与命令有关的几个要素,就像我们常说的“记叙文六要素”一样,一个完整的命令应当包括:1、命令,这当然是核心部分了;2、命令源:命令是谁发出的;3、目标,命令作用在哪些元素上,如往文本框中粘贴内容,那么该TextBox就是命令目标;严格上说,命令是实现了ICommand接口的类,但是,在际使用中,我们不必这样做,一种有效的方法是在某个类中直接声明一个RouteCommand类的成员字段即可,一般使用Static关键字,这样可以使得命令只与类有关,而不必理会其属于哪个实例。下面,我们一起动手完成一个实例:1、新建一个WPF应用程序,如何新建?(略);2、布局好主窗体, 阅读全文
posted @ 2013-06-04 14:17 三叶草╮ 阅读(435) 评论(0) 推荐(0)
摘要: 前言MVVM 就是 Model – View – ViewModel 三组功能(类)分割的设计模式。废话不多说,不知道的自己上网查。用 MVVM 我认为最大好处是能对 ViewModel 做单元测试。另外,MVVM 分工也比较明显,方便安排程序员分组分工进行项目,基本设计有了之后可以各自敲。这样的话,写出来,类(class)最起码有三个。比如 Window1 作为 View,Window1ViewModel 作为 ViewModel,实际业务类比如 Sales Order 销售订单作为 Model。View 不一定要是 System.Control.Window,UserControl 也可以 阅读全文
posted @ 2013-06-03 11:50 三叶草╮ 阅读(315) 评论(0) 推荐(0)