随笔分类 -  NET1101-读书笔记(C# 语言和运行时剖析)

摘要:分类索引:C# 语言和运行时剖析--前言在本章第三节中,笔者采用了自己项目中使用过的一个案例。实现分为四个部分:1. 在自定义Class的属性上标记DisplayName和Editable标记。2.通过一个泛型的解析器来解析自定义Class的所有属性,将每个属性转化为DataTable的一列,DisplayName转化为ColumnName, Editable转化为Column的ReadOnly属性。3.达到目的:a.自动生成DataTable的架构。b.自动将一个Class的实例Entity转化为一行DataRow.c.自动将一行DataRow转化为一个实例Entity。4.通过VSTO在E 阅读全文
posted @ 2013-01-14 15:18 simon_developer 阅读(2513) 评论(1) 推荐(2) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言元旦休假了一段时间,所以没有更新,现在开始恢复更新,一周一到两章。之前的章节在知识点的组织结构上更多参考了《CLR Via C#》这本书。从这章开始,打算脱离这本书的章节结构,来完全讲一些自己的总结。不过在代码实例上还是会引用这本书的案例。委托的概念 一.定义:委托是一种封装方法的类型, 通过委托可以调用方法,相当于C/C++中函数指针的概念. 但不同的是,委托不光是一个函数地址, 而是一个面向对象的类型. 其中封装了指向对象的实例和方法。二.要点:委托相对于其他类型来说相对抽象,因为其中有很多特殊的封装。使用委托时,不能用delegate来定义一个实例 阅读全文
posted @ 2013-01-13 16:05 simon_developer 阅读(1763) 评论(0) 推荐(0) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言枚举类型概念:定义:枚举类型提供了一组"符号名称/值"配对。 示例如下: private enum Color /* : byte */ { White, // Assigned a value of 0 Red, // Assigned a value of 1 Green, // Assigned a value of 2 Blue, // Assigned a value of 3 Orange, // Assigned a val... 阅读全文
posted @ 2012-12-27 18:02 simon_developer 阅读(1569) 评论(0) 推荐(1) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言 字符类型 概念: 定义:在.NET Framwork中,字符(Char)类型总是表示成16位Unicode的编码值。在存储中间中总是占用两个字节(Byte)。 说明:在实践中,直接操作字符类型的场景不是很多,大多数时候字符类型会作为字符串中的一个Item来使用。但在需要控制多国语言或者涉及到需要使用不同的编码方式序列化字节时,... 阅读全文
posted @ 2012-12-26 15:07 simon_developer 阅读(1982) 评论(4) 推荐(1) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言相关概念 概念定义:事件是用于通知其他对象发生了本对象发生了特定的事情的类型成员。说明:事件是.NET类型成员中相对较为难以理解和实践的一个成员,因为事件的定义不是继承自基础的数据类型,而是对委托(delegate)的封装。所以,在了解事件之前,你需要先了解一点委托。应用场景:事件的应用场景非常广泛,其中最常见的场景是在各个前端控件中的大量触发事件设计。原因是因为意义:事件成员的使用有利于在程序中对面向对象原则的实现。例如类型的单一职责原则,控制反转原则。设想如果前端控件不能抽象出大量丰富的事件,那几乎不能将前端的UI元素与业务逻辑脱钩。程序必然高度耦合 阅读全文
posted @ 2012-12-23 13:19 simon_developer 阅读(2000) 评论(3) 推荐(0) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言属性的定义一.概念特性:在语义上接近于字段(Field),但在使用上接近于方法的一种类成员。使用场景:最常用于简单封装和检查类/对象的数据成员(Field)。 属性也可以被称为智能字段。属性的用法:无参属性(默认), 有参属性(索引器).注意:属性的最重要作用是封装字段,使字段不暴露在类型外部随意被随意修改。也可以使用方法来达到这一目的,但属性更为轻量级。二.代码示例internal class Employee { private string name; private Int32 age; publi... 阅读全文
posted @ 2012-12-16 14:37 simon_developer 阅读(3224) 评论(0) 推荐(1) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言参数的定义 一.可选参数与命名参数可选参数: 可以为部分或者全部形参分配默认值. 然后,调用这些方法的代码可以选择不指定部分实参,接受其默认值.命名参数:在使用可选参数时,可以通过制定参数名称的方法为其传递实参.二.准则与规则有默认值的参数必须放在没有默认值的所有参数之后。默认值必须是编译时能确定的常量值。例如:基元类型;枚举类型;能设为null的引用类型等。但不能设置为对象的方法和属性等。使用命名参数传递参数时,可以按照任何顺序。命名的实参传递必须放在实参列表的尾部,也就是,非命名参数应该放在命名参数之前。如果形参标识了ref/out,命名实参应使用如 阅读全文
posted @ 2012-12-15 20:49 simon_developer 阅读(1440) 评论(0) 推荐(1) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言实例与类型构造器一.实例构造器(Instance Constructor):构造类型实例的初始化方法作用:初始化类实例.运行时机:初始化实例时最佳用途:初始化实例中所持有的所有字段,使实例字段都具备初始值注意事项:实例构造器不能够被继承。当实例构造器被修饰为private时,不能够被类外部实例化,常用于设计单例模式二.类型构造器(Type Constructor):设置类型初始化状态的初始化方法作用:控制静态类中成员的初始化时机,可以用于延迟加载运行时机:如果没有显式定义静态构造器,CLR默认为"字段初始化前"(before-fiel 阅读全文
posted @ 2012-12-02 18:21 simon_developer 阅读(1538) 评论(0) 推荐(3) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言常量常量是一个特殊符号,标明一个从不变化的值。用const定义常量只能使用基元类型定义常量。因为常量的值从不变化,所以可以将常量看做是类型定义的一部分,跟类型的实例没有关系。字段字段是类型的一种数据成员,其中容纳了一个值类型的实例或者对一个引用类型的引用。字段一般应该设计为private私有变量。修饰关键字说明备注static静态字段是类型状态的一部分,跟对象状态无关静态字段只能在静态方法或者静态类构造器中调用。默认实例对象与类型的一个实例关联readonly只读字段,只能由构造器方法中的代码写入readonly字段跟常量不同,可以在构造实例的时候被初始 阅读全文
posted @ 2012-11-25 17:17 simon_developer 阅读(501) 评论(0) 推荐(2) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言基本概念一.什么是接口CLR中的接口定义:对一组方法进行了统一签名的类型。从以上定义中可以看出,接口中可以包含的成员包括:方法属性(本质是方法)事件(本质是方法)二.为什么使用接口使用接口是面向抽象编程和解耦合的重要方法。能够帮助实现五大基本OO原则的以下几条原则:开放闭合原则,面向接口编程可以灵活的使用实现接口IA的类CB替换类CA,而不用修改CA去满足新的业务需求。接口复用原则,可以灵活的使用一系列轻量的,不同关注点的接口在不同的业务场合,替换对类的直接引用。依赖反转原则,高层模块不直接依赖底层模块的实现,两者都依赖抽象编程。三.接口的修饰CLR要求 阅读全文
posted @ 2012-11-25 15:16 simon_developer 阅读(2933) 评论(3) 推荐(1) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言基本概念: 一.类是对于业务处理对象的封装, 包括状态和行为的封装. 二.类的成员种类: 1.常量: 数据值恒定不变的一个符号 2.字段: 字段表示一个只读或者可读写的数据值. 通常用字段来标识一个类或者类产生对象的某种状态, 在实践中,通常将字段标识为private, 避免从类/对象外破坏类/对象的状态。 3.实例构造器(Constructor):将新对象的实例字段初始化为良好初始状态的一种特殊方法。 4.类型构造器,也就是静态的Constructor, 用来初始化类的静态字段。 5.方法:一个特殊的函数,用来更改或者查询一个类型或者对象的状态。 6. 阅读全文
posted @ 2012-11-18 14:06 simon_developer 阅读(1250) 评论(1) 推荐(1) 编辑
摘要:分类索引:C# 语言和运行时剖析--前言基本概念:值类型是从System.ValueType继承的类型常见值类型包括: 简单数据类型;enum枚举类型;struct结构类型值类型在内存中分配在线程栈上,引用类型在内存中分配在CLR的托管堆上除了值类型之外的数据类型都是引用类型实践中引用类型最常见,但值类型使用得最多为什么要设计值类型:值类型不需要从托管堆分配引用类型产生的实例对象在托管堆上都会有一些额外的成员,这些成员必须初始化值类型不使用GC垃圾回收控制,作用域结束后,会自行释放。 综上,值类型更有效率,所以在.NET中将一些简单的,常用的,内存占用小的对象设置为值类型,大大提高了整个CL. 阅读全文
posted @ 2012-11-17 23:58 simon_developer 阅读(597) 评论(2) 推荐(1) 编辑
摘要:本系列旨在通过对《CLR Via C#》及相关介绍C#语言本质和运行时机制的文献的研究,来进行一个对C#语言基础、特性的演化的一个剖析。主要包括.NET 类型基础;.NET 进阶特性; .NET核心机制等几个主要模块。.NET类型基础 一 .类型基础: A.值类型与引用类型 B.类和成员的修饰 C... 阅读全文
posted @ 2012-11-17 23:47 simon_developer 阅读(1790) 评论(7) 推荐(2) 编辑