首页 > 学院 > 开发设计 > 正文

Break 、Continue 和ReadOnly、Const和Ref和Out params

2019-11-17 02:56:16
字体:
来源:转载
供稿:网友

Break 、Continue 和ReadOnly、Const和Ref和Out params

Break和Continue区别

之前对于Break和Continue;ReadOnly和Const;ref和out,params之类的基础东东学习过,但是一直没有仔细去研究到底是怎么一回事儿,最近在开发中用到了,仔细来做个总结:

1、Break和Continue

break是跳出整个循环体,不再执行本循环,

continue是结束单次循环,继续下一次循环

 1  #region Break测试 2  3             Console.WriteLine("========Break========"); 4             int x = 0; 5             while (x++ < 20) 6             { 7                 if (x == 3) 8                 { 9                     break;10                 }11                 Console.WriteLine("{0}/n",x);12             } 13             #endregion
View Code

 1  #region Continue测试 2             Console.WriteLine("========Continue========"); 3             int k = 0; 4             while (k++ < 10) 5             { 6                 if (k == 3) 7                 { 8                     continue; 9                 }10                 Console.WriteLine("{0}/n",k);11             } 12             #endregion
View Code

2、ReadOnly和Const

1. const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化

2. const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值(编译时常量);readonly修饰的常量则延迟到运行的时候(运行时常量)

3. 此外,Const常量既可以声明在类中也可以在函数体内,但是Static ReadOnly常量只能声明在类中。

 1  #region ReadOnly 2         static readonly int A = B * 10; 3         static readonly int B = 10; 4  5         const int j = k * 10; 6         const int k = 10; 7  8         static void Main(string[] args) 9         {10             Console.WriteLine("===Readonly输出的值是:===");11             Console.WriteLine("A is {0}.B is {1}", A, B);12             Console.WriteLine("===Const输出的值是:===");13             Console.WriteLine("j is {0}.k is {1}", j, k);14             Console.ReadKey();15         }16         #endregion
View Code

3、ref 和 out,params

问题的引出:

现需要通过一个叫Swap的方法交换a,b两个变量的值。交换前a=1,b=2,断言:交换后a=2,b=1

现编码如下:

 1  1class PRogram 2  2    { 3  3        static void Main(string[] args) 4  4        { 5  5            int a = 1; 6  6            int b = 2; 7  7            Console.WriteLine("交换前/ta={0}/tb={1}/t",a,b); 8  8            Swap(a,b); 9  9            Console.WriteLine("交换后/ta={0}/tb={1}/t",a,b);10 10            Console.Read();11 11        }12 12        //交换a,b两个变量的值13 13        private static void Swap(int a,int b)14 14        {15 15            int temp = a;16 16            a = b;17 17            b = temp;18 18            Console.WriteLine("方法内/ta={0}/tb={1}/t",a,b);19 19        }20 20    }
View Code

运行结果:

交换前 a = 1 b = 2

方法内 a = 2 b = 1

交换后 a = 1b = 2

并未达到我们的需求!

原因分析:int类型为值类型,它存在于线程的堆栈中。当调用Swap(a,b)方法时,相当于把a,b的值(即1,2)拷贝一份,然后在方法内交换这两个值。交换完后,a还是原来的a,b还是原来的b。这就是C#中按值传递的原理,传递的是变量所对应数据的一个拷贝,而非引用。

修改代码如下即可实现我们想要的结果:

 1 class Program 2  2    { 3  3        static void Main(string[] args) 4  4        { 5  5            int a = 1; 6  6            int b = 2; 7  7            Console.WriteLine("交换前/ta={0}/tb={1}/t",a,b); 8  8            Swap(ref a,ref b); 9  9            Console.WriteLine("交换后/ta={0}/tb={1}/t",a,b);10 10            Console.Read();11 11        }12 12        //交换a,b两个变量的值13 13        private static void Swap(ref int a, ref int b)14 14        {15 15            int temp = a;16 16            a = b;17 17            b = temp;18 18            Console.WriteLine("方法内/ta={0}/tb={1}/t",a,b);19 19        }20 20    }
View Code
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表