摘要: 在优化C#代码或对比某些API的效率时,通常需要测试某个方法的运行时间,可以通过DateTime来统计指定方法的执行时间,也可以使用命名空间System.Diagnostics中封装了高精度计时器QueryPerformanceCounter方法的Stopwatch类来统计指定方法的执行时间: 1.阅读全文
posted @ 2018-11-08 20:29 Minotauros 阅读(1130) 评论(5) 编辑
摘要: 一、C#中的泛型引入了类型参数的概念,类似于C++中的模板,类型参数可以使类型或方法中的一个或多个类型的指定推迟到实例化或调用时,使用泛型可以更大程度的重用代码、保护类型安全性并提高性能;可以创建自定义的泛型类型(类、结构、接口、委托)和泛型方法; 1.在泛型类型的定义或泛型方法的声明中,类型参数是阅读全文
posted @ 2018-10-25 17:13 Minotauros 阅读(576) 评论(1) 编辑
摘要: 一、当我们使用关键字delegate声明一个自定义委托类型时,实际上是声明了一个该名称的类类型,继承自抽象类System.MulticastDelegate,还包含实例方法Invoke、BeginInvoke、EndInvoke: 其中的构造函数中第二个参数是native int类型的,这个是什么呢阅读全文
posted @ 2018-10-17 22:57 Minotauros 阅读(613) 评论(1) 编辑
摘要: 本篇内容是特性和反射的最后一篇内容,前面三篇文章: 详解C#特性和反射(一) 详解C#特性和反射(二) 详解C#特性和反射(三) 一、晚期绑定(Late Binding)是一种在编译时不知道类型及其成员,而在运行时创建指定类型的实例并调用其成员的技术,使用命名空间System中的Activator类阅读全文
posted @ 2018-10-09 16:50 Minotauros 阅读(608) 评论(0) 编辑
摘要: 使用反射(Reflection)使得程序在运行过程中可以动态的获取对象或类型的类型信息,然后调用该类型的方法和构造函数,或访问和修改该类型的字段和属性;可以通过晚期绑定技术动态的创建类型的实例;可以获取程序集中的所有类型信息;可以在动态构建新类型;还可以检索元素所添加的特性; ※反射相关的类基本都位阅读全文
posted @ 2018-09-26 20:35 Minotauros 阅读(855) 评论(2) 编辑
摘要: 使用特性(Attribute)可以将描述程序集的信息和描述程序集中任何类型和成员的信息添加到程序集的元数据和IL代码中,程序可以在运行时通过反射获取到这些信息; 一、通过直接或间接的继承自抽象类System.Attribute可以创建自定义的特性类,自定义的特性类必须声明为公共类,命名一般使用Att阅读全文
posted @ 2018-09-20 15:22 Minotauros 阅读(965) 评论(4) 编辑
摘要: 委托(Delegate)是安全封装方法的类型,类似于C和C++中的函数指针,与函数指针不同的是,委托是面向对象的、类型安全的和可靠的; 一、委托类型是CTS中五种基础类型之一,是一种引用类型,表示对具有指定参数列表和返回类型的方法的引用,也是一种特殊的类类型,其类型为System.Multicast阅读全文
posted @ 2018-09-14 11:44 Minotauros 阅读(399) 评论(0) 编辑
摘要: 一、操作系统用进程(Processe)分隔正在执行的程序,用线程(Thread)作为操作系统分配处理器时间的基本单元,进程上下文中可以运行多个线程,进程的所有线程共享其虚拟地址空间,所有线程均可执行程序代码中的任意部分,包括其他线程正在执行的代码; 1.默认情况下,.NET程序只启动单个线程,被称为阅读全文
posted @ 2018-12-16 22:57 Minotauros 阅读(204) 评论(0) 编辑
摘要: 一、使用协变(Covariance)和逆变(Contravariance )能够实现数组之间、委托实例和方法之间、泛型委托实例之间、泛型接口的变量和泛型类型的对象之间、泛型接口的变量之间的隐式转换;使用协变将允许使用比原指定类型派生程度更大(即更具体的)的类型,使用逆变将允许使用比原指定类型派生程度阅读全文
posted @ 2018-12-09 12:13 Minotauros 阅读(358) 评论(1) 编辑
摘要: 本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家多多指出; 在使用集合时,通常为了防止装箱操作而选择List<T>、Dictionary<TKey,阅读全文
posted @ 2018-11-30 11:24 Minotauros 阅读(758) 评论(2) 编辑
摘要: 一、前面两篇文章分别介绍了定义泛型类型、泛型委托、泛型接口以及声明泛型方法: 详解C#泛型(一) 详解C#泛型(二) 首先回顾下如何构建泛型类: 其中,尖括号<>中的T代表的是该泛型类的类型参数,在使用时可以指定其类型,例如,指定类型参数为整数类型,创建封闭式构造类MyClass<int>: 二、这阅读全文
posted @ 2018-11-23 12:16 Minotauros 阅读(396) 评论(1) 编辑
摘要: 一、自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: 1.声明泛型方法时,可以在参数列表中使用这个类型参数:void MyFunc<T>(T obj) { };此时在调用该泛型方法时可以省略类型参数的指定由编译器推断其类型,例如:MyFunc<int>(myNu阅读全文
posted @ 2018-11-15 20:54 Minotauros 阅读(483) 评论(2) 编辑
摘要: 在优化C#代码或对比某些API的效率时,通常需要测试某个方法的运行时间,可以通过DateTime来统计指定方法的执行时间,也可以使用命名空间System.Diagnostics中封装了高精度计时器QueryPerformanceCounter方法的Stopwatch类来统计指定方法的执行时间: 1.阅读全文
posted @ 2018-11-08 20:29 Minotauros 阅读(1130) 评论(5) 编辑
摘要: 由于枚举的基础类型类型为基本的数值类型,支持位运算,因此可以使用一个值表示多个枚举的组合,在定义枚举时需要指定枚举数为2的幂指数方便进行位运算,即枚举数为1,2,4,8…,或1,1<<1,1<<2…: 此时可以使用位移运算方便的获取多个枚举的组合变量: 或在组合中删除其中一项枚举: 需要判断是否包含阅读全文
posted @ 2018-11-01 18:32 Minotauros 阅读(202) 评论(0) 编辑
摘要: 一、C#中的泛型引入了类型参数的概念,类似于C++中的模板,类型参数可以使类型或方法中的一个或多个类型的指定推迟到实例化或调用时,使用泛型可以更大程度的重用代码、保护类型安全性并提高性能;可以创建自定义的泛型类型(类、结构、接口、委托)和泛型方法; 1.在泛型类型的定义或泛型方法的声明中,类型参数是阅读全文
posted @ 2018-10-25 17:13 Minotauros 阅读(576) 评论(1) 编辑
摘要: 一、当我们使用关键字delegate声明一个自定义委托类型时,实际上是声明了一个该名称的类类型,继承自抽象类System.MulticastDelegate,还包含实例方法Invoke、BeginInvoke、EndInvoke: 其中的构造函数中第二个参数是native int类型的,这个是什么呢阅读全文
posted @ 2018-10-17 22:57 Minotauros 阅读(613) 评论(1) 编辑
摘要: 本篇内容是特性和反射的最后一篇内容,前面三篇文章: 详解C#特性和反射(一) 详解C#特性和反射(二) 详解C#特性和反射(三) 一、晚期绑定(Late Binding)是一种在编译时不知道类型及其成员,而在运行时创建指定类型的实例并调用其成员的技术,使用命名空间System中的Activator类阅读全文
posted @ 2018-10-09 16:50 Minotauros 阅读(608) 评论(0) 编辑