20160423
昨天是周五太放松了,晚上没有加班只顾着放松,玩了一晚上,今天又是睡了一上午,没有学习。这下放松过分了没有总结,也没有完成任务。今天来总结一下昨天的学习成果。
昨天设计的数据库今天老大点评了一下发现问题确实很多。比如用户表和权限表的拆分问题,是否应该拆分取决于权限的使用频率。使用频率高时因该拆分。
对C#源代码执行过程的思考(不懂)
构造函数总在new一个对象之前执行。
P p=new p();
因为赋值运算符(=)是从右向左执行,先执行new p,这时候执行类P的构造函数,然后将值赋给p,将p存到内存中。
两个变量的值交换(不使用第三个变量)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
使用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 }
这两种方法都是针对整形的,其他类型不知道怎么才能只使用两个变量交换值。
大家看到我的学习笔记有什么不足或者建议的希望留言评论一下。