1. 默认情况下想使用一些.NET Framework SDK中的命令需要”Visual Studio 200x 命令提示”这个工具。如果想使传统”命令提示符”也支持这些命令应该怎样做呢。当然是配置环境变量。在X:\Program Files\Microsoft Visual Studio 8\VC文件夹下有一个名为vcvarsall.bat的脚本文件,运行它即可完成这个环境变量的配置。
2. checked与unchecked关键字只对整型有效,对于浮点型无效,因为浮点型始终不会出现溢出。checked对于整型溢出会引起OverflowException异常(unchecked中始终不会触发OverflowException异常)。.NET中用Int32.MaxValue表示最大值,Int32.MinValue表示最小值。在checked中MaxValue加1,MinValue减1都会引起异常。
3. 结构和类的主要区别
区 别 |
结构 |
类 |
是值类型还是引用类型? |
值类型 |
引用类型 |
实例存储于栈上还是堆上? |
结构实例称为值,存储于栈上 |
实例称为对象,存在于堆上 |
可否声明默认构造函数? |
不可以 |
可以 |
声明自定义的构造函数,还会声明默认构造函数吗? |
会 |
不会 |
如果在自己的构造函数中不初始化一个字段,编译器会帮助初始吗? |
不会 |
会 |
可以在声明一个实例字段的同时初始化吗? |
不可以 |
可以 |
是否可以继承? |
不可以 |
可以由基类继承 |
是否可以存在析构函数? |
不可以 |
可以 |
4. 关于params参数的问题
1) 只能在一维数组上使用params关键字,所以下面的例子无法通过编译:
Public static int Min(params int[,] table)
2) 不能重载一个只基于params关键字的方法。params关键字不构成方法的签名的一部分。如下面两个方法同时存在将无法通过编译:
public static int Min(int[] paramList)
public static int Min(params int[] paramList)
3) 不允许ref或out params数组,如下面两种声明都无法通过编译
public static int Min(ref params int[] paramList)
public static int Min(out params int[] paramList)
4) params数组参数必须是方法的最后一个参数(即,每个方法的参数只能有一个params数组),如下实例将不能通过编译:
public static int Min(params int[] paramList , int i)
编译器会检查并拒绝任何可能有歧义的重载。例如,以下两个Min方法存在歧义;如果传递两个int参数,将无法辨别具体调用哪一个:
public static int Min(params int[] paramList)
public static int Min(int, params int[] paramList)
5) 非params方法总是优先于一个params方法。也就是说,如果愿意,仍然可以为普通情况创建一个方法的重载版本,如下例:
public static int Min(int leftHandSite, int rightHandSide)
public static int Min(params int[] paramList)
对于Min(2,3);这种形式的调用,前者函数将优先使用。
6) 对于params object[]这类特殊参数,其会匹配同方法名任意参数的调用。也可以不向其传递参数,或传递null。这会被作为new object[0]传入。
7) 调用public int Process(params int[] paramList)这样含有参数为参数数组的方法,我们可以传入几个单独的int值,也可以传入一个int数组,如下两种调用方式都是有效的: