20160423

  昨天是周五太放松了,晚上没有加班只顾着放松,玩了一晚上,今天又是睡了一上午,没有学习。这下放松过分了没有总结,也没有完成任务。今天来总结一下昨天的学习成果。

  昨天设计的数据库今天老大点评了一下发现问题确实很多。比如用户表和权限表的拆分问题,是否应该拆分取决于权限的使用频率。使用频率高时因该拆分。

  对C#源代码执行过程的思考(不懂)

  构造函数总在new一个对象之前执行。

  P p=new p();

  因为赋值运算符(=)是从右向左执行,先执行new p,这时候执行类P的构造函数,然后将值赋给p,将p存到内存中。

  两个变量的值交换(不使用第三个变量)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Test_20160421
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             int a = 10;int b = 21;
14             a = a + b;
15             b = a - b;
16             a = a - b;
17             //change(ref  a,ref   b);
18             Console.WriteLine("a={0},b={1}",a,b);
19             Console.ReadKey();
20         }
21         #region  自定义方法
22         /// <summary>
23         /// 自定义交换方法
24         /// </summary>
25         /// <param name="a">第一个出入的变量</param>
26         /// <param name="b">第二个出入的变量</param>
27         private static void  change( ref int a,ref int b)
28         {
29             a = a + b;
30             b = a - b;
31             a = a - b;
32         }
33         #endregion
34     }
35 }
View Code

  使用ref引用传递

  或者直接用数学计算交换两个int 型的值

使用ref是引用传递,传入的是a和b的地址在方法中对值得修改会影响a和b的值

不使用ref是值传递,在栈里右新建了一个a和一个b(作用域为方法内),将main函数中a,b的值赋给方法内的a和b;方法中只是对方法内的a和b操作没有影响到main函数中的a和b的值

第二种方法 异或运算交换a和b的值

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Test_20160421
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             int a = 10;int b = 21;
14             a = a ^ b;
15             b = a ^ b;
16             a = a ^ b;
17             /*
18              * ^表示异或运算即同一位如果都为0或都为1时结果为1,否则结果为0;
19              * a=10,转化为二进制为  01010
20              * b=21,转化为二进制为  10101
21              * 14行a=a^b 结果为      00000
22              * 15行b=a^b 结果为      01010 =10
23              * 16行a=a^b 结果为      10101 =21
24              */
25             //a = a + b;
26             //b = a - b;
27             //a = a - b;
28             //change(ref  a,ref   b);
29             Console.WriteLine("a={0},b={1}",a,b);
30             Console.ReadKey();
31         }
32         #region  自定义方法
33         /// <summary>
34         /// 自定义交换方法
35         /// </summary>
36         /// <param name="a">第一个出入的变量</param>
37         /// <param name="b">第二个出入的变量</param>
38         private static void  change( ref int a,ref int b)
39         {
40             a = a + b;
41             b = a - b;
42             a = a - b;
43         }
44         #endregion
45     }
46 }

这两种方法都是针对整形的,其他类型不知道怎么才能只使用两个变量交换值。

大家看到我的学习笔记有什么不足或者建议的希望留言评论一下。

原文地址:https://www.cnblogs.com/Li-zhipengBlog/p/5424514.html