随笔分类 - C#
摘要:1、LINQ特有的编程结构隐式类型本地变量:C#的var关键字允许定义不显式指定实际数据类型的本地变量。不过由于编译器将根据初始值推断其数据类型,所有该变量仍然是强类型的。对象和集合初始化语法:它允许我们在创建类或结构变量的同时设置其属性。Lambda表达式:C#Lambda操作符(=>)可以用来构建Lambda表达式,并且在调用以强类型的委托作为参数的方法时,也十分有用。扩展方法:C#扩展方法不使用子类就能够像已知类中添加新的功能。同样,它还可以向不能有子类的密封类和结构中添加新的功能。在编写扩展方法时,第一个参数必须使用this限定符,用来表示被扩展的类型。扩展方法只能定义在静态类中
阅读全文
摘要:1、在.NET Framework里,回调仍是可能的,它们的功能是由使用更为安全和面向对象的委托(delegate)来完成的。本质上来讲,委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。委托类型包含3个重要的信息:它所调用的方法的名称;该方法的参数(可选);该方法的返回值(可选)。2、C#委托类型定义会生成一个密封类,它含有3个编译器生成的方法,这3个方法的参数与返回值基于委托声明。同时在使用C#中delegate关键字创建委托的时候,也就间接声明了一个派生自System.MulticastDelegate的类,这个类时期继承类可以访问包含由委托对象维护的方法地址
阅读全文
摘要:1、与非泛型容器相比,泛型容器的一些优势如下:A、泛型提供了更好的性能,因为它们不会导致装箱或拆箱的损耗;B、泛型更类型安全,因为他们只包含我们指定的类型。C、泛型大幅减少了构建自定义集合类型的需要,因为基础类库提供了几个预制的容器。2、只有类、结构、接口和委托可以使用泛型,枚举类型不可以。3、集合初始化语法。只能对支持Add()方法的类使用集合初始化语法,这是ICollection<T>/ICollection接口决定的。4、使用List<T>类。List<T>类是System.Collections.Generic命名空间中最常用的类型,因为它可以动态调
阅读全文
摘要:1、构建可枚举类型(IEnumerable和IEnumerator)1 public IEnumerator GetEnumerator()2 {3 //返回数组对象的IEnumerator4 return carArray.GetEnumerator();5 }2、用yield关键字构建迭代器方法 1 public IEnumerable GetTheCars(bool ReturnRevesed) 2 { 3 //返回数组对象的IEnume...
阅读全文
摘要:1、接口就是一组抽象成员的集合,表示某个类或结构可以选择去实现的行为,一个类(或者一个结构)可以支持任意数量的接口,因此也就支持了多种行为。接口与抽象基类的区别:a、虽然类定义了一组抽象成员,但它完全可以再定义许多构造函数、字段数据、非抽象成员(具有实现)等;而接口只能包含抽象成员。b、由抽象父类创建的多态接口有一个主要的限制,那就是只有派生类型才支持由抽象父类定义的成员。接口类型就是来解决这个问题的,在定义了接口之后,它就可以被任何层次结构、任何命名空间或任何程序集中的任何类型实现。c、传统抽象基类的另外一个限制就是每一个派生类型必须处理这一组抽象成员并且提供实现,接口则无此限制。2、接口不
阅读全文
摘要:1、可以在派生类型中访问父类的公共成员,但是私有成员只能被定义它的类访问;C#要求一个类只能有一个直接基类。2、C#提供关键字sealed来防止发生继承,如果将类标记为sealed,编译器将不会允许我们从这个类型派生。3、C#结构总是隐式密封的,我们永远不可以从结构继承结构,从类继承结构或从结构继承类,结构只能用于建模独立的、用户定义的数据类型。4、使用base关键字控制基类的创建5、protected关键字。在基类中定义受保护成员的好处在于:派生类不再需要使用公共方法或属性来间接访问数据了。不能从对象实例中直接访问受保护数据。6、如果希望构建新类来使用密封类的功能,唯一的办法就是使用包含/委
阅读全文
摘要:1、Static关键字a、C#类(或结构)可以通过static关键字来定义许多静态成员。如果这样的话,这些成员就只能直接从类级别而不是对象引用调用。b、静态成员只能操作静态数据或调用类的静态方法。View Code 1 class Teenager 2 { 3 public static Random r = new Random(); 4 public static int GetRandomNumber(short upperLimit) 5 { 6 r...
阅读全文
摘要:1、类是有字段数据(成员变量)以及操作这个数据的成员(如构造函数、属性、方法、事件)所构成的自定义类型。2、对象必须使用new关键字来分配到内存中。View Code 1 class Car 2 { 3 //Car的状态 4 public string petName; 5 public int currSpeed; 6 7 //Car的功能 8 public void PrintState() 9 {10 Console.WriteLine("{0} i...
阅读全文
摘要:1、默认情况下,枚举的第一个元素被设置为值0,其余的按照n+1递推;枚举不一定是连续的,也不需要有唯一值。2、默认情况下,用来保存枚举值的存储类型是System.Int32,当然也可以改成我们喜欢的类型。View Code 1 enum EmpType : byte2 {3 Manager = 10,4 Grunt = 1,5 Contractor= 100,6 VicePresident = 97 }3、为枚举变量赋值时,必须以枚举名(EmpType...
阅读全文
摘要:1、C#数组初始化语法View Code 1 static void ArrayInitialization()2 {3 //使用new关键字的数组初始化语法4 string[] stringArray = new string[] { "one", "two", "three" };5 Console.WriteLine("stringArray has {0} elements", stringArray.Length);6 //你使用new关键字的数组初始化方法...
阅读全文
摘要:1、参数传入函数的默认行为是按值传递View Code 1 //默认情况下参数会按值传递 2 static int Add(int x, int y) 3 { 4 int ans = x + y; 5 6 //由于我们修改的是原始数据的副本,调用者不会看到这些改变 7 x = 1000; 8 y = 8888; 9 return ans;10 }11 12 static void Main(s...
阅读全文
摘要:1、C#中ref和out的使用ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。使用ref前必须对变量赋值,out不用。out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。区别可以参看下面的代码: View Code 1 class TestApp 2 { 3 static void outTest(out int x, out int y) 4 {//离开这个函数前,必须对x和y赋值,否则会报错。 5 //y = x; 6 //上面这行会报错,因为使用了out后,x和y都清空...
阅读全文
摘要:1、Read\Readkey\Readline区别Read() 是返回输入的第一个字符的ASCII码,回车表示确认, 不管输入多少,只取第一个字符;ReadKey() 是 按任意键 就返回,并返回这个按键的 按键信息 KeyInfo;ReadLine() 是 回车返回, 返回的是 一个字符串。http://www.cnblogs.com/tangjian/archive/2009/02/15/1391044.htmlhttp://www.cnblogs.com/fireice/archive/2009/05/02/1447919.html2、C#读取控制台的多行输入http://www.cnb
阅读全文

浙公网安备 33010602011771号