C#高级编程(中文第七版) chap 3.2.2
来源:互联网 发布:易语言调用js脚本 编辑:程序博客网 时间:2024/06/05 00:12
//chap 3.2.2(3) class Program { static void Main(string[] args) { int[] ints = {0,1,2,3,4 }; int i = 10; Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); Console.WriteLine("改变后"); ChangeFun(ints, i); Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); Console.ReadLine(); } static void ChangeFun(int [] ints,int i) { ints[0] = 100; i = 100; } }
除非特殊说明,所有的参数都是通过方法来传递。但是,因为引用类型的变量只包含对象的引用,将要复制的正是这个引用,而不是对象本身,所以对底层对象的修改会保留下来。相反,值类型的对象包含的是实际数据,所以传递给方法的是数据本身的副本。
例如,int通过传递给方法,对应方法对该int的值所做的任何改变都没有改变原int对象的值,但如果把数组或其他引用类型(如类)传递给方法,对应的方法就会使用该引用改变这个数组中的值,而新值会反射在原始数组对象上。
需要注意的是,字符串的行为方式有所不同,因为字符串是不可变的(如果字符串的值改变,就会创建一个全新的字符串),所以字符串无法采用一般引用类型的行为方式。在方法调用中,对字符串做的任何改变都不会影响原始字符串。
//chap3.2.2 (4) class Program { static void Main(string[] args) { string name = "Jack"; int[] ints = {0,1,2,3,4 }; int i = 10; Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); Console.WriteLine("name=" + name); Console.WriteLine("改变后"); ChangeFun(ints, ref i, ref name); Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); Console.WriteLine("name=" + name); Console.ReadLine(); } //如果把一个参数传递给方法,且这个方法的输入参数前面带了ref关键字,则该方法所做的任何改变都会影响原始对象的值 static void ChangeFun(int [] ints,ref int i, ref string name) { name = "Tom"; ints[0] = 100; i = 100; } }
//chap3.2.2 (5) class Program { static void Main(string[] args) { int j; string testName; Console.WriteLine("out关键字:"); outInt(out j,out testName); Console.WriteLine("j=" + j); Console.WriteLine("testName=" + testName); Console.ReadLine(); } //编译器使用out关键字来初始化。在方法的输入参数前面加上out时,传递给方法的变量可以不需要初始化,改变量通过引用传递,所以在被调用的方法中返回,对应方法对该变量进行的任何改变都会保留下来。 static void outInt(out int i,out string testName) { i = 100; testName = "test"; } }
阅读全文
0 0
- C#高级编程(中文第七版) chap 3.2.2
- c#高级编程第七版笔记
- c# 高级编程第七版 笔记
- C#高级编程(中文第七版)(奋斗的小鸟)_PDF 电子书
- 编程珠玑 Chap 2
- pp看书笔记---C#高级编程第九版 第七章 【运算符和类型强制转换】
- C#高级编程---反射2
- 《C#高级编程第2版》(简体中文版)PDF下载
- C#高级学习第七章-文件操作
- 购得 C# 高级编程 (第4版)
- C#高级编程第四版学习笔记
- C#高级编程第四版电子书
- 《C#高级编程(第6版) 》读后感
- c# 高级编程第四版文摘
- C#高级编程(第4版)
- C#高级编程(第6版)
- C#高级编程(第六版) 目录
- C#高级编程(第6版) 目录
- ioTize-获得embed award的简单玩意,没看出有啥意义
- 重写equal 的同时为什么必须重写hashcode
- Freemarker判断序列中是否包含某个元素
- 企业级Tomcat部署实践及安全调优(再续)
- 比特币学习之密钥
- C#高级编程(中文第七版) chap 3.2.2
- 模型
- TreeSet引发的OSGI服务代理创建异常
- Jquery鼠标点击后变色,点击另一个按钮颜色还原
- 选择排序法
- Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/tools/ant/launch/Launc
- org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()
- darwin之socket消息获取与处理
- OpenGL 入门教程实例