首页 > 代码库 > c#复习3

c#复习3

  1. 值类型和引用类型

值类型:int double char bool decimal struct enum(继承自system.valueType)

引用类型:string 数组 类 接口 委托

值类型存在内存的栈上,引用类型存储在堆中,栈上的效率高于堆
值传递:把值作为参数传递,把值本身进行传递。ref可以把值传递变为引用传递

引用传递:传递的是引用。

技术分享
 1    private void button1_Click(object sender, EventArgs e)
 2         {
 3             person p = new person();
 4             p.Name = "张三";
 5             test(p);
 6             MessageBox.Show(p.Name);
 7             //李四
 8         }
 9 
10 
11 
12         void test(person s)
13         {
14             s.Name = "李四";
15             person p2 = new person();
16             p2.Name = "王五";
17             s = p2;
18         }
引用传递
技术分享

 

2.字符串

   重要特性:不可变性,对字符串的操作都会在内存中产生一块新的实例

  我们可以将一个字符串看做是 char类型的只读数组。

技术分享
1  private void button2_Click(object sender, EventArgs e)
2         {
3             string str = "asdfghjk";
4             MessageBox.Show(str[5].ToString());
5         }
char

 3.等号和Equals,以及重写Equals

  对于string类型而言,不管是等号还是Equals比较的都是值本身

  //Equals默认比较的是地址,但是我们在自己定义的类中如果用到Equals,都会重写

技术分享
 1  private void button3_Click(object sender, EventArgs e)
 2         {
 3             string s1 = "abc";
 4             string s2 = "abc";
 5             //对于string类型而言,不管是等号还是Equals比较的都是值本身
 6             if (s1 == s2)
 7             { 
 8               MessageBox.Show("s1和s2相等");
 9             }
10             else
11             {
12                 MessageBox.Show("s1和s2不相等");
13             }
14 
15             if(s1.Equals(s2))
16             {
17                 MessageBox.Show("s1和s2相等");
18             }
19             else
20             {
21                 MessageBox.Show("s1和s2不相等");
22             }
23 
24             //Equals默认比较的是地址,但是我们在自己定义的类中如果用到Equals,都会重写
25             person p1=new person(){Name="刘刘"};
26             //类的命名空间
27             MessageBox.Show(p1.ToString());//_1.值传递.person
28 
29 
30             person p2 = new person() {Name = "刘刘"};
31             if (p1 == p2)
32             {
33                 MessageBox.Show("p1和p2相等");
34             }
35             else
36             {
37                 MessageBox.Show("p1和p2不相等");
38             }
39 
40             if (p1.Equals(p2))
41             {
42                 MessageBox.Show("p1和p2相等");
43             }
44             else
45             {
46                 MessageBox.Show("p1和p2不相等");
47             }
48         }
49 
50  class person
51     {
52         private string name;
53 
54         public string Name
55         {
56             get { return name; }
57             set { name = value; }
58         }
59 
60         public override bool Equals(object obj)
61         {
62             person person = obj as person;
63             if(this.Name==person.Name)
64             {
65                 return true;
66             }
67             else
68             {
69                 return false;
70             }
71         }
72         public override string ToString()
73         {
74             return "重写的ToString()";
75         }
76              
77     }
View Code

4.显示程序的运行时间

技术分享
 1  private void button4_Click(object sender, EventArgs e)
 2         {
 3             //string str = string.Empty;
 4             //StringBuilder sb = new StringBuilder();
 5             ////显示运行时间
 6             //Stopwatch sp = new Stopwatch();
 7             //sp.Start();
 8             //for(int i=0;i<1000000;i++)
 9             //{
10             //    //str += i;
11             //    sb.Append(i);
12             //}
13             //sp.Stop();
14             //MessageBox.Show(sp.Elapsed.ToString());
15             //StringBuilder sb = new StringBuilder();
16             //sb.Append("gaojinding");
17             //sb.Append("wangwu");
18             //sb.Insert(3, "lisi");
19             //MessageBox.Show(sb.ToString());
20 
21         }
View Code

 

c#复习3