现在的位置: 首页 > 综合 > 正文

.Net学习难点讨论系列15 – 小技巧总结

2012年09月08日 ⁄ 综合 ⁄ 共 1642字 ⁄ 字号 评论关闭

 

1.       默认情况下想使用一些.NET Framework SDK中的命令需要”Visual Studio 200x 命令提示这个工具。如果想使传统命令提示符也支持这些命令应该怎样做呢。当然是配置环境变量。在X:\Program Files\Microsoft Visual Studio 8\VC文件夹下有一个名为vcvarsall.bat的脚本文件,运行它即可完成这个环境变量的配置。

 

2.       checkedunchecked关键字只对整型有效,对于浮点型无效,因为浮点型始终不会出现溢出。checked对于整型溢出会引起OverflowException异常(unchecked中始终不会触发OverflowException异常)。.NET中用Int32.MaxValue表示最大值,Int32.MinValue表示最小值。在checkedMaxValue1MinValue1都会引起异常。

 

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)         不允许refout 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数组,如下两种调用方式都是有效的:

抱歉!评论已关闭.