.Net
aowuaowuwuwu
这个作者很懒,什么都没留下…
展开
-
.Net平台构造块CLR、CTS和CLS
CLR:从程序员的角度看,.net可以理解为一个运行库环境和一个全面的基础类库,CLR(公共语言运行库),其主要作用是为我们定位、加载和管理.net类型,同时负责底层细节工作,如内存管理、应用托管、处理线程、安全检查等。CTS:公共类型系统,描述了运行库所支持的所有可能的数据类型和编程结构,也规定了他们在.net元数据中的表示,一种特定的支持.net的语言可能不支持CTS所定义的所有特性。转载 2016-03-01 22:23:26 · 339 阅读 · 0 评论 -
ICloneable接口
1.ICloneable接口定义public interface ICloneable { object Clone(); }2.示例public class MyClass5:ICloneable { public int X { get; set;} public int Y { get; se原创 2016-03-09 20:49:57 · 441 阅读 · 0 评论 -
构建可比较对象IComparable接口和IComparer接口
1.IComparable接口定义public class IComparable { int CompareTo(object o); }System.IComparable接口指定了一种允许一个对象可基于某些特定键值进行排序的行为。2.示例public class MyClass6:IComparable {原创 2016-03-09 21:49:50 · 321 阅读 · 0 评论 -
集合与泛型
1.非泛型集合的问题第一个,非泛型集合类中存储结构时,CLR必须执行大量的内存转换操作,降低运行时速度。(装箱与拆箱)第二个,集合类不是类型安全的,因为他们是为了操作System.Object类而开发的。如果.net开发者需要创建高度类型安全的集合(如某容器只能容纳实现了某个接口的对象),需要手工创建一个全新的集合类。2.装箱把值类型数据保存在引用类型变量中。显式的将值类型分配给S原创 2016-03-10 22:05:41 · 362 阅读 · 0 评论 -
委托
1..net 委托类型用来定义和响应程序中的回调。.net委托类型是一个类型安全的对象,指向可以以后调用的其他方法。.net委托是内置支持多路广播和异步方法调用的对象。同时lamabda表达式只是匿名方法的一种,提供了一种简单的方式来使用委托。.net委托中的委托(包括自定义)都被自动赋予同步或异步访问方法的能力,可以不用手工创建与管理一个Thread对象而直接调用另一个辅助执行线程上的方法。原创 2016-03-11 15:23:37 · 366 阅读 · 0 评论 -
事件
1.委托中可能存在的问题public class MyClass1 { public delegate int FuncTest(int x, int y); //将委托定义在使用他的类型的作用域里 public FuncTest Func1 = null; //该委托对象设置为公有,去除注册和注销方法 publ原创 2016-03-11 16:44:31 · 288 阅读 · 0 评论 -
C#匿名方法和lambda
1.C#支持内联处理事件,通过直接把一段代码语句赋值给事件(使用匿名方法),而不是构建底层委托调用的独立方法。Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.net委托类型的使用。原创 2016-03-13 22:46:26 · 334 阅读 · 0 评论 -
索引器方法
1.C#允许构建按照标准数组方式索引的自定义类和结构,以这种方式访问子项的方法成为索引器方法。public class MyClass1 { private ArrayList arrTest = new ArrayList(); public Object this[int index] { get {原创 2016-03-13 23:12:03 · 246 阅读 · 0 评论 -
操作符重载
1.二元操作符重载,通常被要求配套重载。(如>和2.C#提供operator关键字来允许自定义类型对内建操作符做出不同的反应,operator关键字只可与static关键字联合使用。3.自定义类操作符重载示例:public class Point { public int X { get; set; } public int Y { get原创 2016-03-13 23:25:48 · 221 阅读 · 0 评论 -
扩展方法
1..net3.5引入扩展方法,它允许你在不直接修改原始类型的情况下为类或结构添加新的方法或属性。2.扩展方法必须声明为静态的;所有的扩展方法都需要使用this关键字对第一个参数(并且仅对第一个参数)进行修饰,用this修饰的参数表示被扩展的类。public static class Myclass4 { //返回任何对象的完全限定名称 pu原创 2016-03-14 20:22:05 · 284 阅读 · 0 评论 -
匿名类型
1.当需要创建一个简单的遵循典型的基于值的数据类型时,并且只会被程序中少量的地方使用到,使用匿名类型可能更加的方便。2.定义一个匿名类型的时候需要使用关键字var,编译器会在编译时自动生成新的类定义,而我们无法在C#代码中看到该类的名字,初始化语法将告诉编译器为新创建的类型创建私有的后台字段和只读属性。3.对象初始化语法中定义的每一个名称/值对分别被映射为拥有相同名字的只读属性以及对应被该原创 2016-03-14 20:48:56 · 421 阅读 · 0 评论 -
LINQ
1..net3.5引入LINQ2.隐式类型本地变量var myId = 1; var myName = "aaaaa";许多LINQ查询返回的序列只有在编译时才能确定其数据类型,显然无法显示的声明变量,此时使用隐式类型。3.C#LINQ查询操作符是调用System.Linq.Enumerable类中方法的简便方式。这些方法通常都会使用委托作为参数。实际上也就是在使用微软已经定原创 2016-03-14 22:02:36 · 307 阅读 · 0 评论 -
对象生命周期与可终结对象
1.值类型和数据类型值类型分配在栈上面,而引用类型分配在堆上面,在栈上面存在一个空间,该空间保存堆上面的对象的地址。2.只有一个对象从代码库的任何部分都不可访问时,垃圾回收器才会从堆中删除它,将在下一次垃圾回收时发生。3..net垃圾回收器是堆的清洁工,他会压缩空的内存块来实现优化(必要时),为辅助这一行为,托管堆保存这一个指针,它精确的指示下一个对象被分配的位置。4.托管堆分配内原创 2016-03-14 23:23:03 · 397 阅读 · 0 评论 -
NuGet控制台为项目添加第三方程序集引用
摘自:http://www.cnblogs.com/wych/p/4380320.html在有些情况下,有些操作使用程序包管理窗口不能达到目的,只能使用控制台命令才能实现,比如说,安装特定版本的程序包。控制台命令窗口在安装有NuGet插件的VS上打开NuGet命令窗口的过程如下:依次选择菜单Tools(工具)->Library Package Manager(库转载 2017-04-20 09:09:23 · 2728 阅读 · 0 评论 -
在C#中,Json的序列化和反序列化的几种方式
摘自:http://www.cnblogs.com/caofangsheng/p/5687994.html在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象。什么是JSON?JSON (JavaScript Object Notation) is a lightweight data-interchange for转载 2017-04-20 09:20:01 · 3872 阅读 · 1 评论 -
Json.net对于导航属性的处理(解决对象循环引用)
摘自:http://www.cnblogs.com/ecollab/p/6159914.html对于两张表A、B多对多的关系中,A的导航属性中有B,B的导航属性中有A,这样Json.net对A或者B对象序列化时会形成死循环所以对于导航属性要加标签首先在A、B实体类工程(Model)中引用Json.ne然后对导航属性加不序列化标签([JsonIgnore])转载 2017-04-20 10:41:35 · 851 阅读 · 0 评论 -
C#流
1. 什么是流数据流(Stream)是对串行传输数据的一种抽象表示,是对输入/输出的一种抽象。数据有来源和目的地,衔接两者的就是串流对象。用比喻的方式来说或,数据就好比水,串流对象就好比水管,通过水管的衔接,水由一端流向另一端,如下图所示:从应用程序的角度来说,如果将数据从来源取出,可以试用输入(读)串流,把数据储存在内存缓冲区;如果将数据写入目的地,可以使用输出(写)串流转载 2017-05-03 10:54:37 · 449 阅读 · 0 评论 -
构建可枚举类型(IEnumerable和IEnumerator接口)
1.IEnumberable接口public interface IEnumberable { IEnumerator GetEnumerator(); //返回对另一个接口的引用IEnumerator }2.IEnumerator接口public interface IEnumerator { bool Move原创 2016-03-08 23:19:00 · 251 阅读 · 0 评论 -
接口
1.接口就是一组抽象成员的命名集合。2.接口与抽象类虽然类定义了一组抽象成员,它完全可以在定义许多构造函数、字段数据、非抽象成员、等。但是接口,只能包含抽象成员3.接口成员不指定访问修饰符(所有的接口成员都是公共的和抽象的)。并且支持属性协议,这里和类中的属性比较如下。语法上支持自动属性的格式且支持仅只读或这只写的语法。如:int p{get;} //这个在普通类中是不允许自动属性只用原创 2016-03-08 22:35:05 · 214 阅读 · 0 评论 -
异常处理
1..net平台提供了一种标准的技术来发送和捕获运行时错误,结构化异常处理(SEH)。例如,如果使用C#构建WCF服务,可以向远程调用者抛出一个SOAP错误,而使用的关键字与在同一个应用中的方法之间抛出异常的关键字完全相同。同时,可以通过异常,他们包含容易读懂的问题描述信息和首次触发异常时调用栈的详细信息。2.System.Exception基类所有用户定义和系统定义的异常类都继承原创 2016-03-08 20:40:19 · 220 阅读 · 0 评论 -
.Net CIL和程序集相关类容简介
尽管.net二进制文件与非托管的Windows二进制文件具有相同的文件扩展名,但他们的内部却是玩不不同的。CIL:公共中间语言,MSIL(微软中间语言)简称IL,指同一个概念。CIL是一种平台无关的语言,C# 编译器生成的CIL,并不是平台相关的指令,CIL代码必须在使用之前进行即时编译,将CIL代码编译成有意义的CPU指令的工具成为JIT(即时)编译器转载 2016-03-01 22:57:01 · 329 阅读 · 0 评论 -
C# 数据类型分类
分为值类型和引用类型。值类型:继承自System.ValueType类,都会在栈上面分配,高效,包含枚举和结构;值类型支持MaxValue和MinValue字段,这两个字段说明了给定的类型可以存储的范围。引用类型:继承链上没有System.ValueType类,在堆上面分配。string类型是引用类型。转载 2016-03-01 23:02:06 · 739 阅读 · 0 评论 -
System.DateTime和System.TimeSpan
static void UseDateAndTImes(){Console.WriteLine("=> Dates and Times:");//这个构造函数接受年、月、日DateTime dt = new DateTime(2011,10,27);//他时星期几Console.WriteLine("The day of {0} is {1} ",dt.Date, dt.D转载 2016-03-01 23:11:48 · 556 阅读 · 0 评论 -
反射和晚期绑定
1.使用元数据完整的描述类型(接口、类、结构、委托、枚举)的能力是.net平台的一个关键要素。2.反射:是一个运行库类型发现的过程通过反射可以得到一个给定的*.dll获取*.exe程序集所包含的所有类型的列表,这个列表包含给定类型定义的方法、字段、属性和事件。主要在System.Reflection命名空间。3.System.Type类System.Type类定义了原创 2016-03-15 21:30:40 · 655 阅读 · 0 评论 -
.net特性
1..net平台允许程序员使用特性把更多的元数据嵌入到程序集中。特性是用于类型(类、接口、结构等)、成员(属性、方法等)、程序集或模块的代码注解。.net特性是扩展了抽象的System.Attribute基类的类类型。所有.net特性都将加上Attribute标记的后缀。 [ServiceContract] -->[ServiceContractAttribute] 2.当原创 2016-03-15 22:32:08 · 703 阅读 · 0 评论 -
String 与StringBuilder
引用类型是在垃圾回收托管堆上分配的对象。默认情况下,当我们对引用类型进行相等性测试的时候(== || !=),如果引用类型指向内存中的相同对象,则返回true。尽管string类型是引用类型,但是相等性操作符已经被重定义为比较字符串对象的值,而不是内存中他们引用的对象。System.Text.StringBuilder 独特之处在于,当我们调用这个类型的成员时,都是直接修改对象内部的字符数据,转载 2016-03-03 20:10:53 · 282 阅读 · 0 评论 -
C# 参数传递行为
参数传入函数的默认行为是按值传递,如果没有参数标记参数相关的修饰符,数据的副本就会被传入函数,到底复制什么取决于参数是值类型还是引用类型。1.static int Add(int x, int y){int ans = x + y;//数值数据(int)属于值类型,修改的是原始数据的副本x = 11111;y = 22222;}2.out修饰符:输出参数,原创 2016-03-03 22:19:56 · 297 阅读 · 0 评论 -
C# 枚举与结构
枚举enum EmpType : byte //默认为int型,部署在低内存设备中可以考虑修改存储的类型 { Manager, // = 0 Grunt, // = 1 Contractor, // = 2原创 2016-03-03 22:22:19 · 217 阅读 · 0 评论 -
动态类型dynamic和动态语言运行时DLR
1.动态类型与隐式申明的类型或者通过System.Object引用声明的类型有着巨大的不同,动态类型不是强类型的,对于C#编译器通过dynamic关键字声明的数据点可以分配任意初始值,而且可以在声明周期内重新分配任何新的值。public void Func3() { dynamic t = 1; t = "hello";原创 2016-03-16 22:39:29 · 543 阅读 · 0 评论 -
进程、应用程序域、对象上下文
1.进程可以承载一组相关的.net程序集,应用程序域(AppDomain)是对该进程的逻辑细分,一个应用程序域进一步被细分为多个上下文边界;使用上下文的概念,CLR能够确保恰当的控制那些带特殊运行时要求的对象。2.每一个windows进程都恰好包含一个用作程序入口点(entry point)的主线程,线程是进程中的基本的执行单元,进程的入口点创建的第一个线程被成为主线程。主线程可以次线原创 2016-03-16 23:16:46 · 362 阅读 · 0 评论 -
多线程
1.获取对当前线程的引用,只需要调用静态属性Thread.CurrentThread; Thread.GetDomain();//获取当前线程所在的应用程序域;Thread.CurrentContext;获取当前操作操作线程的上下文。2.几乎无法控制底层系统和CLR对线程的调度。3.原子性操作在多线程环境下总是线程安全的。通常的操作都不是原子操作,包括++i,赋值操作等。原创 2016-03-17 19:40:58 · 212 阅读 · 0 评论 -
CLR线程池
1.当使用委托类型(BeginInvoke调用)进行异步方法调用的时候,CLR并不会创建新的线程。委托的BeginInvoke()方法创建了由运行时维护的工作者线程。2.System.Threading命名空间中的ThreadPool类型可以与这些线程交互。原创 2016-03-17 22:04:49 · 303 阅读 · 0 评论 -
类
1.默认构造函数不接受参数,除了把对象分配到内存中,默认构造函数确保所有字段数据都设置为正确的默认值default(Type)。一旦定义了自定义的构造函数,默认构造函数就自动从类中移除,并且不再有效。2.this关键字进行串联构造函数调用class TestA { private int x; private原创 2016-03-03 23:15:40 · 290 阅读 · 0 评论 -
继承和多态
1.虽然构造函数一般定义为公共的,但是派生类从来没有继承父类的构造函数。构造函数只能用于构造定义它的类。2.sealed关键字:指定该类为密封类,防止作为基类被继承。3.值类型总是密封的,不能作为基类被继承。所有结构是不能被继承的。4.在子类构造函数中使用base调用父类的构造函数 public class T1 { public str原创 2016-03-07 21:53:39 · 184 阅读 · 0 评论 -
对象序列化
1.序列化描述了持久化(可能包括传输)一个对象的状态到流(如文件流、内存流)的过程。被持久化的数据包括所有以后需要用来重建(反序列化)对象状态所必须的信息。2.通过人工保存对象的每个字段数据,并且在需要的时候人工的读取每个值,重新生成一个新的对象。但是若为该类添加[Serializable]特性,该类将自动具备序列化功能。.net序列化保存对象的幕后调用非常复杂,当一个对象被持久化到流时,原创 2016-03-19 21:44:18 · 290 阅读 · 0 评论 -
ADO.NET:连接层
1.ADO.NET类库有三种不同的方式来实现数据访问:连接式、断开式、通过Entity框架(EF)2.使用连接式,代码需要显示连接或者断开基层数据源,用这中方式使用ADO.NET时,通常会用到连接对象、命令对象、和数据读取器对象来实现数据交互。3.数据提供程序是一组定义在用于和特定数据源类型进行通信的命名空间内的一组类型。每种提供程序都有一系列类来提供核心功能。原创 2016-03-20 11:27:05 · 300 阅读 · 0 评论 -
Razor常用语法示例
Razor语法1. Razor通过理解标记的结构来实现代码和标记之间尽可能顺畅的转换。2. Listing@stuff.Length itemsRzaor可以知道表达式后面的空格字符不是一个有效的标识符,所以它可以顺畅的转回到标记语言。3. Theitem name is one. 切换到MarkDown编辑器Razor在点字符向后窥看,看到一个尖括号,因此知道这不是一原创 2017-05-03 20:30:47 · 436 阅读 · 0 评论