一、类 1.给方法传递参数 int通过值传递给方法,对应方法对该int的值所做的任何改变都没有改变原int对象的值。但如果把数组或引用类型传递给方法,对应的方法就会使用该引用来改变这个数组中的值,而新值会反射在原始数组对象上。 using System; namespace Wrox { class ParameterTest { static void SomeFunction(int[] ints, int i) { ints[0] = 100; i = 100; } public static int Main() { int i = 0; int[] ints = { 0, 1, 2, 4, 8 }; // Display the original values Console.WriteLine("i = " + i); Console.WriteLine("ints[0] = " + ints[0]); Console.WriteLine("Calling SomeFunction..."); // After this method returns, ints will be changed, // but i will not SomeFunction(ints, i); Console.WriteLine("i = " + i); Console.WriteLine("ints[0] = " + ints[0]); return 0; } } } 结果显示: i = 0 ints[0] = 0 Calling SomeFunction... i = 0 ints[0] = 100 2.ref参数和out参数 ref必须在方法外面赋值,out必须在方法里面赋值,方法外面可以不赋值。 二、结构 1.结构与类的区别。 1).结构不支持继承。 2).结构是值类型。 3).结构可以初始化如下: Dimensions point; point.Length=3; point.Width=6; 在结构上调用new运算符,或者给所有的字段分别赋值,结构就完全初始化了。当然结构如果定义为类的成员时,在初始化类时,该结构会自动初始化。 4).为结构定义构造函数的方式与为类定义构造函数的方式相同,但不允许定义无参数的构造函数。 下面的结构会编译错误: struct Dimentsions { public double Length=1; public double Width=2; } 三、部分类 1.partial关键字允许把类、结构或借口放在多个文件中。partial关键字的用法是:把partial放在class、struct或interface关键字的前面。 例: //bigClassPart1.cs partial class TheBigClass { public void MethodOne() { } } //BigClassPart2.csf partial class TheBigClass { public void MethodTwo() { } } 四、扩展方法 1.程序集最初的源代码无法修改就需要用到扩展方法。扩展方法是静态方法,他是类的一部分。 例如: namespace Wrox { public static class MoneyExtension { public static void AddToAmount(this Money money,decimal AmountToAdd) { money.Amount+=amountToAdd; } } } 对于扩展方法,第一个参数就是要扩展的类型,他放在this关键字的后面。这个方法是Money类型的一部分。在扩展方法中可以访问所扩展类型 的所有公有的方法和属性。 在主程序中,AddToAmount()方法看起来像是另一个方法。他没有第一个参数,也不能对它进行任何处理。 cash1.AddToAmount(10M); 扩展方法虽是静态的,但也要用标准的实例方法调用。 如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。