C#学习(三)
本周继续学习了一些定义类的基本知识,还学习了如何开始开发一个WP8.1应用程序。一起来看一下吧!
一、定义类时的基本知识
1. 可选的程序变量(optional arguments)
在C#3.0时还不允许可选择参数传递,但在C#4.0中就加入了这一特性。optional arguments:即在定义函数时给参数赋予默认值,在调用函数时可以不必再传入实参,实例如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace lesson_3
8 {
9 class Program
10 {
11 static void TestParam(int a, float b = 5.5f) //定义时给参数赋予默认值
12 {
13 Console.WriteLine("the first arguments is : {0}, the first arguments is : {1}", a, b);
14 }
15
16 static void Main(string[] args)
17 {
18 TestParam(5); //调用时可以只传入一个参数
19 }
20 }
21 }
2. 参数的值传递、ref址传递、out
值传递类似于C++;ref址传递相当于C++中&的用法;out与ref类似,不同的是out会在变量未初始化时给变量赋值。
1 static void GetTime( int h, int m, int s )
2 {
3 h = 12;
4 m = 34;
5 s = 56;
6 }
7 static void Main(string[] args)
8 {
9 int h1=0, m1=0, s1=0;
10 GetTime(h1, m1, s1); //函数执行后变量的值仍然是h1=0, m1=0, s1=0
11 }
1 static void GetTime(ref int h, ref int m, ref int s)
2 {
3 h = 12;
4 m = 34;
5 s = 56;
6 }
7 static void Main(string[] args)
8 {
9 int h1=0, m1=0, s1=0;
10 GetTime(ref h1, ref m1, ref s1);
11 Console.WriteLine("h1={0}, m1={1}, s1={2}", h1, m1, s1); //执行结果h1=12, m1=34, s1=56
12 }
1 static void GetTime(out int h, out int m, out int s)
2 {
3 h = 12;
4 m = 34;
5 s = 56;
6 }
7 static void Main(string[] args)
8 {
9 int h1, m1, s1; //在函数体外初始化没意义,因为使用out传递时肯定会被清空
10 GetTime(out h1, out m1, out s1);
11 Console.WriteLine("h1={0}, m1={1}, s1={2}", h1, m1, s1); //执行结果h1=12, m1=34, s1=56
12 }
out与ref区别:
两者都是按地址传递的,使用后都将改变原来的数值。很多人在论坛上解释说out是按数值传递,是错误的。简单的测试后可以知道out使用也能改变数值的,所以肯定是按照地址传递的。
其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。经典!!!
(此段来自百度知道,讲的很清楚!)
3. 类的静态成员:静态变量、静态方法;静态类。
类的静态变量和静态方法需使用类名直接调用,而不需实例化之后调用。
静态构造函数:静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
在使用静态构造函数的时候,以下几点应该注意:(引用自http://www.cnblogs.com/michaelxu/archive/2007/03/29/693401.html)
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
4. 诸如this指针的运用,函数重载(overload),重写(overriding)等与C++类似,不再说了。
二、开始开发一个WP8.1应用程序
1. 新建一个WP8.1应用程序,选择模板 -- Visual C# -- 应用商店应用 -- Windows Phone应用,选择“空白应用”。
2. 双击屏幕右侧“解决方案”中的“MainPage.xaml”,即可出现图形界面。
3. 点击屏幕最左侧“工具箱” -- “常用XAML控件”,找到“Button”,直接拖到模拟图形的手机中,同样的方法再找到“TextBlock”,拖入黑色屏幕中。
4. 使用屏幕右下角的属性给Button和TextBlock分别命名,并定义Button上的文本和TextBlock的默认文本。
5. 双击屏幕右下角button的属性里的click后的空白框,在弹出的函数编辑页面写入按下button后触发的动作:HelloWorldText.Text = "Hello World!";
编辑按下button后触发的动作:HelloWorldText.Text = "Hello World!";
6. 点击运行
7. 运行结果
结束。