泛义的工具是文明的基础,而确指的工具却是愚人的器物。
1.数组概述 声明数组: //每个元素初始化为0,虽然数组元素是值类型,但是却是分配在托管堆中的; int[] myArray=new int[100]; //每个元素初始化为null; Object[] mytype=new Object[100]; //myArray和mytype变量存储的是指向数组的引用,而非数组本身; CLS要求所有数组都是0基数组。
1.Enum 枚举是定义了一组符号名称和数值对,如下: 1 //byte、sbyte、short、ushort、int、uint、long 或 ulong 2 enum Color : byte //默认是int 3 { 4 Red,//默认赋值为0 5 Yellow,//默认赋值为1 6 Blue,//默认赋值为2 7 } 枚举类型使程序更见容易阅读、编写和维护。
1.实例构造器[.ctor] 默认情况下,对于引用类型,如果我们没有显示的定义实例构造器,则C#编译器会为我们定义一个无参的公有实例构造器。 一个类的实例构造器在访问基类的继承字段之前,必须调用基类的实例构造器,C#编译器会自动产生对基类默认构造器的调用代码。
1.无参属性 当定义一个属性时,编译器会在生成的托管模块中产生一下3项: 1:get访问器方法,定义get时才有; 2:set访问器方法,定义set时才有; 3:关于属性的元数据,这项总是存在; 这写元数据信息中包括一些标记和属性类型,并有一个对get和set访问器方法的引用,仅仅为属性和它的访问器之间提供了一层关联关系。
1.对象的等值性和唯一性 Object的Equals[虚]方法判断两个对象是否相等; Object.ReferenceEquals判断两个对象是否指向同一引用[严格意义上的相等、对象的唯一性]。 2.对象的散列码 Object的GetHashCode[虚]方法返回一个Int32类型的散列码,当重写Equals方法而没有重写GetHashCode方法时编译器会提示一个警告信息。
1.基元类型 编译器直接支持的数据类型成为基元类型。基元类型与FCL中的类型有直接的映射关系[int=Int32],这样我们可以简化的方式书写代码,并且编译后的IL和直接使用FCL中的数据类型是完全相同的。
1.System.Object CLR要求每个类型都要继承自System.Object[直接或者间接方式],如果不显示继承,编译器会自动为我们添加对System.Object的继承。 System.Object提供几个公有实例方法: Equals:如果两个对象具有相同的值,返回true; GetHashCode: 返回对象的值的散列码。
1.DEMO 使用匿名类型: static void Main() { var someType = new { Name = "乱舞春秋", Age = 22, Sex = "男" }; Console.WriteLine(someType); } 这个会输出什么呢?是someType的类型完全限定名吗?非也...看图: 我们都知道Console.WriteLine会去调用参数的ToString方法,那么可以肯定匿名类型someType重写了ToString方法。
1.对象初始化器 首先声明一个类Person: public class Person { public string Name { get; set; } public int Age { get; set; } } 初始化它并调用它: static v...
1.DEMO static void Main() { var Num = 6; var str = "乱舞春秋"; var dou = 9.25d; Console.WriteLine(Num); Console.WriteLine(str); Console.WriteLine(dou); } var关键字,用来声明并初始化局部变量。
1.从DEMO开始 先看一个扩展方法的例子: 1 class Program 2 { 3 public static void Main() 4 { 5 Int32 myNum = 1; 6 myNum = myNum.
一个简单的C#从控制台程序代码如下: 1 using System; 2 using System.Text; 3 /// 4 /// XML注释 5 /// 6 class CSharp 7 { 8 /// 9 /// 入口方法 10 ...