这一周章老师讲了C#有关类的方面的知识,由于与C++,JAVA等语言类似之处不少,所以学起来不是特别吃力。但C#中类也有着不少新颖而有趣的用法与规则,本次学习记录就主要以探究这些内容为主。
1.从C#4.0开始支持optional arguments
optional arguments,即可选参数。(翻译如有错误,请指正!)
用下列代码可快速简简洁说明什么是optional arguments:
1 class myClass 2 { 3 public void TestParam(int aaa, float bbb = 5.5f) 4 { 5 … 6 } 7 } 8 … 9 myClass myCs= new myClass(); 10 myCs. TestParam(aaa); 11 myCs. TestParam(aaa, 6.8);
这是可以编译通过的。也就是说,传入函数的参数是可变的,有一些预先定义好的参数可定义不用传进去,函数将自动采用它们的默认值。
下面通过一个简单的实例看一下效果:
1 namespace Class3Test 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Email email = new Email(); 8 //试验可变函数 9 email.SendMail("bob@foo.com", "Hello World"); 10 email.SendMail("bob@foo.com", "Hello World", isBodyHtml: true);//告诉编译器跳到了哪一个参数 11 email.SendMail("bob@foo.com", "Hello World", true, true); 12 13 Console.ReadKey(); 14 } 15 16 class Email 17 { 18 public void SendMail(string toAddress, string bodyText, 19 bool ccAdministrator = true, bool isBodyHtml = false) 20 { 21 Console.WriteLine("{0}, {1}, {2}, {3}", toAddress, bodyText, ccAdministrator, isBodyHtml); 22 } 23 } 24 25 } 26 }
运行结果如下:
代码浅显易懂,这里就不在解释。不过需要牢记于心的是中间跳过可选参数的时候要使用 参数名:值 这样的形式告诉编译器该语句跳到了哪一个参数,毕竟编译器没有这么智能。
2.ref/out参数
ref参数就类似于C++里的&,可使“方法”返回多个返回值,在函数中对传入的参数值的操作是被保存的。如下列代码:
1 public void TryRef( ref int h, ref int m, ref int s ) 2 { 3 h = 12; 4 m = 34; 5 s = 56; 6 } 7 ... 8 int h1 = 0, m1 = 0, s1 = 0; 9 ...TryRef(ref h1, ref m1, ref s1); 10 Console.WriteLine("{0}, {1}, {2}", h1, m1, s1); 11 ...
运行结果如图:
但需要注意的一点是定义处“形参”和调用处“实参”都要用 ref 来修饰,缺少一处都无法通过编译。
out参数的用法与ref相似,将上面程序中的ref换成out运行结果是一样的。不过有一点不同的是使用out时,传入的参数是可以只声明而不初始化赋值的。如下列代码所示:
1 public void TryOut( int h, ref int m, out int s ) 2 { 3 h = 12; 4 m = 34; 5 s = 56; 6 } 7 int h1 = 0, m1 = 0, s1;//s1未赋初值 8 ...TryOut( h1, ref m1, out s1); 9 Console.WriteLine("{0}, {1}, {2}", h1, m1, s1); 10 ...
运行结果如下:
需要注意的是类似于ref定义处“形参”和调用处“实参”都要用 out来修饰。
本次学习记录到此为止。有机会以后也会补充一些内容。
望各位老师前辈大牛不吝赐教!
原文:http://www.cnblogs.com/tjulym/p/4372305.html