昨天是周五太放松了,晚上没有加班只顾着放松,玩了一晚上,今天又是睡了一上午,没有学习。这下放松过分了没有总结,也没有完成任务。今天来总结一下昨天的学习成果。
昨天设计的数据库今天老大点评了一下发现问题确实很多。比如用户表和权限表的拆分问题,是否应该拆分取决于权限的使用频率。使用频率高时因该拆分。
对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 Program10 {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 ///23 /// 自定义交换方法24 /// 25 /// 第一个出入的变量26 /// 第二个出入的变量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 #endregion34 }35 }
使用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 Program10 {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,转化为二进制为 0101020 * b=21,转化为二进制为 1010121 * 14行a=a^b 结果为 0000022 * 15行b=a^b 结果为 01010 =1023 * 16行a=a^b 结果为 10101 =2124 */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 ///34 /// 自定义交换方法35 /// 36 /// 第一个出入的变量37 /// 第二个出入的变量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 #endregion45 }46 }
这两种方法都是针对整形的,其他类型不知道怎么才能只使用两个变量交换值。
大家看到我的学习笔记有什么不足或者建议的希望留言评论一下。