摘要: 委托是一个类,它提供了回调函数机制,而且是类型安全的。使用委托可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,提高了程序的可扩展性。使用委托老规矩,先上个例子:结果:几点说明:使用关键字delegate声明委托。委托是类型安全的,定义时其返回值类型、参数个数及参数类型要和想要调用的方法兼容。在这个例子中,通过Introduce方法获取对delegateIntroduce委托对象的引用。委托对象相当于方法的包装器,使方法能通过包装器进行间接回调。委托即允许调用静态方法(如①②),还允许调用实例方法(③)。将一个方法绑定到委托时,允许引用类型的协变性和逆变性。(ps:陌生 阅读全文
posted @ 2014-04-08 10:35 fireshadow23 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 一、 无参属性1. 定义属性 无参属性就是我们最常见的属性方式,在赋值时可以加入一定的逻辑判断。属性的定义其实不复杂,先看个直观的例子:说明:属性要定义名称和类型,且类型不能是void。属性是不能重载的。我们不能定义名称相同、类型不同的两个属性。属性一般需要定义get和set方法来操作类内部的私有支持字段,如上面的_name, _age等。Set方法中包含隐藏参数叫做value,表示赋给属性的值。只读只写属性:可以通过省略set来定义只读属性(如Count属性),或者省略get来定义只写属性。CLR支持静态、实例、抽象和虚属性。例子中的Name和Age就是我们最常用的实例属性,Count就是静 阅读全文
posted @ 2014-04-03 15:19 fireshadow23 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 一、 命名参数、可选参数命名参数和可选参数是在Visual C#2010中引入的新特性。 笨地儿我个瓜不兮兮的,今天才知道。可选参数:定义方法时为参数设置默认值,调用该方法时可以省略为某些形参指定实参。命名参数:调用方法时,通过指定参数名称的方式为特定形参指定实参。指定时是根据名称将形参和实参关联,而不是与参数在列表中的位置关联。例如: class Program { static void Main(string[] args) { //可选参数 Employee.DisplayInfo(24, "程序员"); //相当于 Employee.DisplayInfo(24, 阅读全文
posted @ 2014-04-03 14:25 fireshadow23 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。 例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型。 (2). Action Action是无返回值的泛型委托。 Action 表示无参,无返回值的委托 Action 表示有传入参数int,string无返回值的委托 A... 阅读全文
posted @ 2014-04-03 11:09 fireshadow23 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 关于依赖注入 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。应用控制反转,对象在被创建的时候,由一个调控系统内所 有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这 个责任的反转。 控制反转还有一个名字叫做依赖注入(Dependency Injection),简称DI。相对而言对于.Net开发者来说听到得更多的是依赖注入这个名词。实现依赖注入的框架有很多,如 Spring.Net,Unity,Ninject等等,基... 阅读全文
posted @ 2014-04-02 15:51 fireshadow23 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 对于一些现成的类,如果我们想添加一些新的方法来完善功能,但是不想改变已有的封装,也不想使用派生类,那么该怎么办呢?这里我们可以使用扩展方法。一见钟情--初识扩展扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。我们首先来看个例子,有个直观的认识。一个现有的类User:public class User { string _name; public User(string Name) { _name = Name; } public string Name { get { return _name; } set { this._name = val 阅读全文
posted @ 2014-04-02 15:35 fireshadow23 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 对于操作符,我们并不陌生,例如+,-,*,%等二元操作符,以及++,!等一元操作符。但是对于非基元类型,我们需要通过一些自定义方法才能使用这些操作符。今天主要和大家分享关于操作符重载和转换操作符的知识。一、操作符重载方法CLR并不知道操作符,操作符重载对于它来说只是一些方法而已。但是CLR规定了语言应该如何公开操作符重载,每种编程语言自行决定是否支持操作符重载。定义操作符重载方法注意两点:CLR规范要求操作符重载方法必须是 public static 类型。C#要求操作符重载方法必须有一个参数的类型和当前定义这个方法的类型相同。否则会产生编译错误 操作符重载实例我们为非基元类型Complex重 阅读全文
posted @ 2014-04-02 14:48 fireshadow23 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 静态类是一些不能实例化的类,它的作用是将一些相关的成员组合到一起,像我们常见的Math, Console等。静态类由static关键字标识,静态类成员也只能是static类型。Static关键字只能用于修饰类,不能修饰值类型。C#编译器对静态类的限制:1. 基类只能为System.Object。因为继承是针对对象而言的,静态类不能创建实例,所以从其他类派生没有实际意义。2. 静态类不能实现接口。3. 静态类的成员只能为static类型,可以定义静态的方法,属性,事件等。publicstaticclassStaticClass{privatestaticstring_name;publicsta 阅读全文
posted @ 2014-04-02 14:36 fireshadow23 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 对于构造器,大家应该都不陌生,它主要是用来进行初始化状态的。包括实例构造器和类构造器两种,先给大家看个实际的例子。class Dog : Animal { privatestring _name; privateint _age; publicstring Name//属性 { get { return _name; } set { _name = value; } } publicint Age { get { return _age; } set { _age = value; } } publicstaticstring type ="动物";//静态字段 publi 阅读全文
posted @ 2014-04-02 14:28 fireshadow23 阅读(216) 评论(0) 推荐(0) 编辑
摘要: JScript Editor Extensions——折叠JavaScript代码由于最近写的JavaScript稍微多了一点,然后在查看的时候就很不方便,总是要拖动滚动条来查找。于是就想着这JavaScript代码能否像在C#代码一样可折叠呢?这款工具可直接通过VS的扩展管理器中进行下载,如下所示:下载安装完之后,您只要重启一下VS就可以查看到效果了,查看效果如下:Javascript parser——树形状查看JS代码同样这款工具可以通过VS的扩展管理器直接获得:同样下载安装重启VS,来查看效果。重启VS之后首先在菜单中视图===其他窗口===JavaScript Parse。点击工具之后 阅读全文
posted @ 2014-03-31 15:28 fireshadow23 阅读(4530) 评论(0) 推荐(1) 编辑