C#
文章平均质量分 68
凯奥斯
可能是最不会写注释的程序员。
展开
-
C#语法小知识(三)枚举类型enum
枚举类型声明一系列常数,用于表示这个类型的变量可能会在这些常数里变化。本文讲解了枚举类型的几种用法。原创 2016-09-08 22:19:37 · 8123 阅读 · 0 评论 -
C#语法小知识(十八)const与readonly
const和readonly都可以表示不可修改的字段,而const表示常量,readonly表示只读变量。原创 2016-10-29 23:33:16 · 791 阅读 · 0 评论 -
C#语法小知识(十九)using
using关键字有两种用途:一种是作为指令。一种是作为语句。原创 2016-10-30 22:45:13 · 766 阅读 · 0 评论 -
C#语法小知识(二十四)自定义类型转换
C#使用implicit和explicit来自定义类型转换运算符。原创 2016-11-30 22:48:45 · 1091 阅读 · 0 评论 -
C#语法小知识(二十三)重载运算符
C#里使用Operator关键字定义静态方法来重载运算符。原创 2016-11-29 22:49:23 · 2700 阅读 · 0 评论 -
C#语法小知识(二十)params
C#中可以使用params来实现可变参数。params之前可以有任意多个参数,或者没有,params之后不可以有参数。一个方法声明中只允许有一个params关键字。原创 2016-11-25 22:37:24 · 8762 阅读 · 0 评论 -
C#语法小知识(十四)迭代器(IEnumerable/IEnumerator/yield)
C#里有一个很好用的foreach关键字,有些时候可以取代for循环来遍历一个数据结构,例如List、Dictionary等。而自定义的类型如果希望可以foreach来遍历的话就需要继承IEnumerable,并为它添加一个迭代器类(继承IEnumerator)。我之前在小话设计模式(十五)迭代器模式中简单介绍过IEnumerable的写法,这里就以此为例。原创 2016-10-23 19:27:26 · 2284 阅读 · 0 评论 -
C#语法小知识(二十一)ref与out
C#只能有一个返回值,当我们需要一个方法返回多个返回值的时候,可以为方法添加一个ref或者out修饰的参数。原创 2016-11-26 22:00:31 · 1150 阅读 · 0 评论 -
C#语法小知识(二十二)集合Collection
System.Collections命名空间里面包含了几种常用的集合类型。原创 2016-11-27 23:41:42 · 1082 阅读 · 0 评论 -
C#语法小知识(四)委托delegate
delegate 是一种可用于封装命名或匿名方法的引用类型。 委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。 有关委托的应用,请参见委托和泛型委托。这里我们就介绍一下委托的几种用法。原创 2016-09-09 13:55:11 · 6883 阅读 · 0 评论 -
C#开发中的垃圾回收机制简析
GC的前世与今生虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久。早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现。Lisp的程序员认为内存管理太重要了,所以不能由程序员自己来管理。但后来的日子里Lisp却没有成气候,采用内存手动管理的语言占据了上风,以C为代表。出于同样的理由,不同的人却又转载 2017-05-04 21:39:26 · 1026 阅读 · 0 评论 -
C#性能优化黑科技(一)【反射】修改属性的快速方法
当我们在撸码的时候,不可避免的要使用反射来修改属性的值。我们都知道这种反射是太阳一般的慢,如果属性类型是值类型,那么就会因为装箱拆箱产生额外的GC(垃圾回收)。那么加快速度并减少GC呢,本文将介绍一个名为“CreateDelegate”的黑科技。原创 2017-08-20 12:50:34 · 6602 阅读 · 2 评论 -
DotNet源码解读(一)Dictionary
先放源码,解读稍后补上核心数据结构 private struct Entry { public int hashCode; // Lower 31 bits of hash code, -1 if unused public int next; // Index of next ent原创 2017-05-11 08:53:15 · 904 阅读 · 0 评论 -
C#语法小知识(一)Equals和==的区别
==是operator,它必须被声明为静态方法,所以不能是虚函数,无法实现多态。Equals是非静态方法,所以可以被声明为虚函数,可以实现多态。原创 2016-09-06 09:05:01 · 4173 阅读 · 2 评论 -
C#语法小知识(十三)带返回值的委托
委托的相关基础知识请参考C#语法小知识(四)委托delegate,这里讨论一下带返回值的委托如何处理。原创 2016-10-17 11:41:05 · 11326 阅读 · 0 评论 -
C#语法小知识(二)struct和class的区别
结构与类共享大多数相同的语法,但结构比类受到的限制更多:1、在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。2、结构不能声明默认构造函数(没有参数的构造函数)或析构函数。3、结构在赋值时进行复制。 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。4、结构是值类型,而类是引用类型。5、与类不同,结构的实例化可以不使用 new 运算符。6、结构可以声明带参数的构造函数。7、一个结构不能从另一个结构或类继承,而且不能作为一个类的原创 2016-09-07 01:29:09 · 2413 阅读 · 0 评论 -
C#语法小知识(五)接口interface
接口具有下列属性:接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。不能直接实例化接口。接口可以包含事件、索引器、方法和属性。接口不包含方法的实现。类和结构可从多个接口继承。接口自身可从多个接口继承。原创 2016-09-10 22:39:24 · 2844 阅读 · 0 评论 -
C#语法小知识(八)扩展
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像普通方法一样进行调用。 对于用 C#,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。原创 2016-09-23 18:47:34 · 1426 阅读 · 0 评论 -
C#语法小知识(九)事件
事件是委托的一种特殊形式,通过event修饰符来标识。类或对象可以通过事件向其他类或对象通知发生的相关事情。 发送(或引发)事件的类称为发行者,接收(或处理)事件的类称为订阅者。原创 2016-09-24 06:03:38 · 1522 阅读 · 0 评论 -
C#语法小知识(六)属性与索引器
属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为“访问器”的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于属性,不同之处在于它们的取值函数采用参数。原创 2016-09-13 14:54:31 · 7136 阅读 · 0 评论 -
C#语法小知识(十五)异常处理
当程序会出现可以预知的错误时,我们就需要使用异常处理。C#里可以使用try、catch和finally关键字进行错误处理。原创 2016-10-24 22:19:14 · 1250 阅读 · 0 评论 -
C#语法小知识(七)特性
特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。特性具有以下属性:特性可向程序中添加元数据。元数据是有关在程序中定义的类型的信息。所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员。可以添加自定义特性,以指定所需的任何附加信息。原创 2016-09-15 22:39:42 · 2228 阅读 · 0 评论 -
C#语法小知识(十)反射
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。反射(Reflection)有下列用途:它允许在运行时查看特性(attribute)信息。它允许审查程序集中的各种类型,以及实例化这些类型。它允许调用后期绑定的方法。它允许在运行时创建新类型,然后使用这些类型执行一些任务。原创 2016-09-28 23:03:48 · 1641 阅读 · 0 评论 -
C#语法小知识(十七)序列化与反序列化(Binary)
序列化和反序列化在编程中是一种非常常用的功能,C#语法小知识(十六)序列化与反序列化(XML)中我们学习了如何使用XML序列化和反序列化对象,本文介绍一下如何使用Binary(命名空间System.Runtime.Serialization.Formatters.Binary)来序列化和反序列化对象。原创 2016-10-26 08:01:12 · 1777 阅读 · 0 评论 -
C#语法小知识(十六)序列化与反序列化(XML)
C#提供了两类序列化与反序列化的手段,一种是XmlSerializer(命名空间System.Xml.Serialization),另一种我们会在后续文章中介绍。原创 2016-10-25 23:36:46 · 1442 阅读 · 0 评论 -
C#语法小知识(十一)泛型
泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。原创 2016-10-16 19:37:33 · 993 阅读 · 0 评论 -
C#语法小知识(十二)匿名方法与Lambda表达式
C#语法小知识(四)委托delegate里介绍了如何创建delegate,委托方法可以用匿名方法或者Lambda表达式实现。原创 2016-10-16 21:06:00 · 1476 阅读 · 0 评论 -
C#性能优化黑科技(二)【反射】批量实例化对象的快速方法
在实际开发中,我们有时候会遇到这样的问题,我们知道某一个类的Type,如何实例化这个对象?答案很简单:object obj = Activator.CreateInstance(type);但是如果是需要批量实例化对象(例如读取自定义格式的配置文件),这种方法在效率和GC上都不太理想。(Mono2.0)我注意到System.Object有一个方法,叫做MemberwiseClone原创 2017-08-24 17:50:12 · 4981 阅读 · 0 评论