C#学习笔记(更新中)(欢迎纠错)

来源:互联网 发布:淘宝邮箱采集器 编辑:程序博客网 时间:2024/05/15 01:36

1、语言中添加var关键字后可能导致的问题及避免方法

例子 :早期程序中如果有var类型,则用C#3.0以上编译下列程序会出错

using System;using System.Collections.Generic;public class var {}public class EntryPoint{       static void Main(){               var myList=new List<int>(); //编译错误         }}

解决方法:遵循推荐的以大写字母开头的.net类型命名规范

2.readonly 和const 区别

readonly在对象创建时可写,在构造函数中可以根据需要多次赋值,只有在构造函数中才能作为ref或out型参数传递,而且readonly确保是运行时计算的。

const用于编译时,而且用类名来访问const变量(隐式静态的)。

若一个类A中同时有readonly和const字段,B类中创建并使用A的实例,若A修改了这两个字段的值,并重新编译。则B必须重新编译后才能看到A中const的变化。所以设计类时需要仔细考虑用readonly还是const。

3.只读属性与readonly字段

只读属性效率低于只读字段(但只是简单返回一个私有字段时,会内联,效率一样)。但只读属性利大于弊:

(1)只读属性可以延迟求值(推迟执行)。当属性表示的值需要相当设计计算时更高效,如果使用只读字段,则此计算必须在构造函数中执行,但此时所需数据可能还不具备或对象使用者根本不需要访问这个值,会造成浪费。

(2)只读属性对执行封装有益。只读属性对版本升级有更大灵活性,不会影响客户使用类,如对属性每次访问记录日志。

4.初始化器来初始化类字段发生在运行时而不是编译时,故可使用常量之外的东西。

5.应用程序、进程、线程与应用程序域的关系:

一个应用程序只有一个应用程序域,除非自己创建额外的。

在.net出现以前,一个进程下,只能运行一个应用程序,而在.net出现后,一个进程下,可以运行多个应用程序,这都是因为应用程序域的出现。应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。您可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。

应用程序域和线程之间不具有一对一的相关性。在任意给定时间,在单个应用程序域中可以执行几个线程,而且特定线程并不局限在单个应用程序域内。也就是说,线程可以自由跨越应用程序域边界;不为每个应用程序域创建新线程。在任意给定时间,每一线程都在一个应用程序域中执行。运行库会跟踪在哪些应用程序域中有哪些线程正在运行。

6.非对称访问器可访问性(MSDN)http://msdn.microsoft.com/zh-cn/library/75e8y5dd(v=vs.110).aspx

7.C#中类的默认访问修饰符是internal

在C#中,string 是 System.String 的别名,所以基本上在使用时是没有差别的。习惯上,我们把字符串当作对象时(有值的对象实体),我们用string。而我们把它当类时(需要字符串类中定义的方法),我们用String,比如:string greet = String.Format("Hello {0}!", place);其实乱用也可以,只是这样概念上清楚一点。另外string是C#保留字,不可用作变量名,String就不是了。