C#.NET
文章平均质量分 86
FreedomRoad~
专注于app底层/架构/算法/业务工作流程,记录进步的足迹和感悟。
展开
-
C#中的yield关键字
1.yield return 语句可一次返回一个元素2.yield break; // 终止迭代查询Yield关键字后程序的执行过程:Typical Implementation:1).Caller calls function2).Function executes and returns list 返回一个列表3).Caller uses list 对列表进行操翻译 2014-11-06 00:07:33 · 1177 阅读 · 0 评论 -
dynamic基础类型/C#与动态脚本语言交互/dynamic自定义类型
ruby python js动态语言有他们自身的优点,因此C#中的var关键字和匿名方法开辟了C#的动态编程路径,.net 4中增加了dynamic类型。DLR(dynamic language runtime)是脚本运行库,是添加到CLR的一系列服务,它允许添加动态语言,如ruby python,并使C#具有这些动态语言相同的某些动态功能,silverlight也使用DLR。DLR位于Sys原创 2015-10-10 10:58:30 · 3400 阅读 · 0 评论 -
LINQ统一数据操作语句
一、基本原理1.数据源无关的数据统一操作,LINQ语句做了一个程序语句到各种数据源之间的抽象统一中间件。where开始,select或group结束. order 和group,select new等各种语句。2.用了拓展方法,在generic枚举类型来做,编译器会将LINQ语句解释为where上的枚举类型的事例对象上调用拓展方法,实现功能。因为拓展方法的拓展接口是IEnumerabl原创 2015-10-10 09:22:50 · 1381 阅读 · 0 评论 -
C#自定义特性和反射
反射需要一整本书来讨论,这里只介绍了Type类和Assembly类,他们是访问反射所提供的拓展功能的主要入口点。这里介绍了自定义特性,它比其它方面更常用,以及如何在运行期间检索自定义特性信息。一、自定义特性内置的特性可以根据特性来影响编译。自定义特性可以在运行期间获取程序信息,可以影响执行程序的方式。例如自定义特性可以用于支持对自定义许可类进行声明性的代码访问 安全检查原创 2015-10-11 16:18:49 · 3193 阅读 · 0 评论 -
C#异常处理
C#中异常处理一般不影响性能,所以应该返回必要的错误码或者打印Log以外,需要的地方必须加入异常处理。一、.net异常处理和预定义异常类.net内建异常类有:System.SystemException .net CRL抛出的严重异常,例如抛出StackOverflowException,ArgumentExceptionSystem.ApplicationExceptio原创 2015-10-11 17:23:02 · 2388 阅读 · 0 评论 -
C#基础规则和需要注意的语言特性
1.IL语言,CRL管理JIT编译先编译为IL语言,然后运行时候用CRL虚拟机通过即时编译JIT为机器代码,也就是按需编译然后存储起来只编译一次。2.C#和托管C++C++在托管代码中受限使用指针,不能使用模板和多继承,而且会编译为IL语言,运行时候才JIT编译,.net下的VB和JS也是这样的机制,但是C++有一个优点就是可以调用非托管的C++,C#要调用底层只能通过COM互操作原创 2015-09-28 08:22:15 · 936 阅读 · 1 评论 -
C#面向对象语言特性
1.类部分类/继承/多态/抽象类部分类partical修饰就可以了,CRL会合并多个文件中的部分类,静态类是只包含静态成员的类不能实例化,用.访问。类继承分为:继承和接口继承类是单继承,多接口继承。结构体不可以继承,可以多继承接口。虚函数基类virtual声明,子类override声明。非虚函数重写要用new修饰,子类调用基类可以通过base调用。纯虚函数,纯虚原创 2015-09-28 08:56:42 · 1247 阅读 · 0 评论 -
C#内存管理-栈堆/回收器托管/非托管资源释放/指针的应用
1.栈内存-从上往下增长,释放时从下部的末尾出栈.net 5中栈好像也是从下往上增长了,释放时从上部顶端出栈。栈类型数据,整体是从进程空间中的栈内存资源的最大地址处开始分配栈内存的,栈指针总是指向已用地址更小的内存地址上,下一个为空闲内存地址。当变量出了作用域时候,栈内存就会释放,栈指针上移到非空闲地址的小地址上,若再进来变量就会覆盖之前不用了的地址内存区域。 栈内存分配是对整原创 2015-10-11 12:03:30 · 2750 阅读 · 0 评论 -
A Tutorial: Learn How to Avoid The 10 Most Common C# Mistakes笔记
感觉比较重要的需要注意的陷阱总结了下:基础语言特性:1.C#是强数据类型的,注意引用和值类型区别。2.C#中提供的默认值和C++相反,C#中数据成员提供默认值,局部方法中不提供默认值。.net类库和内存管理:3.string类型比较不能用==符号,而应该用Equals方法。 Console.WriteLine(s == "straße"); Cons原创 2015-10-12 23:29:03 · 590 阅读 · 0 评论 -
C#的默认访问权限
1.在namespace中的类、接口默认是internal类型的,也可以显示的定义为public类型,不允许是其他访问类型。2.在一个类里面,属性和方法默认是private的,可以显示的定义为public、private、protected、internal或protected internal等访问类型。3.接口中不能定义成员变量,接口中的方法默认为public的访问权限,但是不能显示的转载 2015-11-08 18:34:03 · 1340 阅读 · 0 评论 -
C#委托/Lambda表达式/事件
1.委托基本定义委托用delegate定义,指定返回值和参数列表的函数类型,不包括数据,这些方法是不区分静态或者非静态的,可以引用一个委托实例也可以引用多个(广播)。可以任意修饰符,可以防止在类内部,也可以在类外部,不可以在函数内部定义。给委托对象赋值时候需要对委托构造函数传递一个参数(具体方法的引用),或者将定义的方法直接赋值给委托对象,这些方法不用传递参数先真正调用时候委托对象原创 2015-10-03 11:41:34 · 3548 阅读 · 0 评论 -
C#字符串和正则表达式
0.string类简单字符串操作用string类,对应IL中的System.String类,有很多足够常用的字符串操作,但是频繁操作效率非常低下,所以其它方式的字符串操作同样必不可缺。每次生成一个新的实例都要申请新的堆资源,和回收旧的资源。1.StringBuilder频繁更改:频繁创建字符串和多次创建较长的字符串,那么需要用System.TextStringBuilder类提高性能。原创 2015-10-03 18:34:43 · 2712 阅读 · 0 评论 -
C#语言基础原理及优缺点
C#是专门为.net程序框架而创造的语言。.net框架有ms的.netFramework, Mono的.NetFramework。net程序编译和执行过程中的流程图:优点:缺点:总结:原创 2014-11-08 17:01:01 · 24760 阅读 · 5 评论 -
C#委托及各种写法
C# 委托及各种写法委托是嘛?委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法。如何使用委托?1、定义委托类型[访问修饰符]delegate 返回类型 委托名(形参);2、声明委托对象委托名 委托实例转载 2015-10-01 09:41:03 · 1639 阅读 · 0 评论 -
foreach/yield语句自定义IEnumerable和IEnumerator类型
1.foreach语句 C#中的foreach语句不会翻译为IL中的foreach语句,而是会翻译为IEnumerable中的接口的属性和函数,将类型替换为相应的泛型,IEnumerator while MoveNext Current语句,会用while一次遍历迭代器的所有元素。含有数组成员的类会继承Array类,Array类会继承IEnumerable类,IEnumerable类包原创 2015-10-02 09:33:04 · 746 阅读 · 0 评论 -
C#yield return和yield break函数执行逻辑理解
1.使用要求: 1)你不能在具有以下特点的方法中包含 yield return 或 yield break 语句: 匿名方法。 有关详细信息,请参阅匿名方法(C# 编程指南)。 包含不安全的块的方法。 有关详细信息,请参阅unsafe(C# 参考)。2)返回类型要求:迭代器的声明必须满足以下要求: 返回类型必须为 IEnumerable、IEnumerab原创 2015-10-01 13:07:22 · 17550 阅读 · 0 评论 -
C#数组特性
1.C#数组基本特性1)数组是存储的引用,引用的元素存放在托管堆,如果元素是值类型任意初始化方式都可以,如果元素是引用类型那么初始化时侯元素要new出来。2)多维逗号隔开就可以了,长度用Length。数组类CRL编译后使得继承自Array类,也就是继承自IEnumerable,IStructuralComparable等,IEnumerable有 IEnumerator GetEnumer原创 2015-10-02 11:44:53 · 1072 阅读 · 0 评论 -
C#编程思想及C#类型/运算符和强制类型转换
1.C#编程的几大方面1)baseType过程式的编程缺陷: C#要注意内存数据值类型/引用类型,类型转换错误。2)CRL OOP面向对象泛型接口:泛型设计和接口设计特性理解CRL补充的代码自己要添加的代码,IL中间语言分析原理。3)元编程,函数编程,数据编程:元编程和函数编程的风格,正则表达式,lambda表达式,LinQ编程。4).Net Framework事件框架异步编程原创 2015-10-02 18:54:03 · 1641 阅读 · 0 评论 -
C#拓展方法
转载自:https://msdn.microsoft.com/zh-cn/library/vstudio/bb383977%28v=vs.100%29.aspx1.不用创建新的派生类型和重写编译原有类或接口,而为类或接口拓展方法扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进转载 2015-10-04 16:26:29 · 758 阅读 · 0 评论 -
C#集合类(数据结构)
一、选择数据结构1)线性容器List数组/Stack/Dequeue按需求模型选择即可,LinkedList是双向链表增删修改快.需要有序数组SortList线性排序容器都可以;如果既需要查找快又需要频繁修改那么可以用List记录索引,用LinkedList存储。2)二叉树类型容器SortedDictionary可以提供二叉树类型插入删除查找都比较折中的键值对容器。Sort原创 2015-10-04 20:03:45 · 9017 阅读 · 3 评论