值传递-值类型 class hello World 形参 i static void change 100(int x) System. Console. Writeline("Inside method, x=+x); X=100 System. Console. WriteLine("Inside method, x=+x) 实参 static void Main(stringl args) int y =10 System. Console. WriteLine("Outside method, y=+ y): Outside metho Inside method x=10 change Inside method. x=100 System. Console. WriteLine("Outside method,y=+y);Outside method, y=l( 对方法中形参的操作不会改变方法外实参的值
值传递-值类型 class HelloWorld { static void change100(int x) { System.Console.WriteLine("Inside method, x=" + x); x = 100; System.Console.WriteLine("Inside method, x=" + x); } static void Main(string[] args) { int y = 10; System.Console.WriteLine("Outside method, y=" + y); change100(y); System.Console.WriteLine("Outside method, y=" + y); } } • 对方法中形参的操作不会改变方法外实参的值。 Outside method, y=10 Inside method, x=10 Inside method, x=100 Outside method, y=10 形参 实参 A-PDF Split DEMO
值传递-引用类型 class student i public int No class hello World i static void change 100(Student x {xNo=100 static void Main(string args) Student s=new Studento S No= 10 change 100(s) System. Console. WriteLine("s No=+S No) S No=100 对方法中引用的操作会改变方法外实际对象的内容
值传递-引用类型 class Student { public int No;} class HelloWorld { static void change100(Student x) { x.No = 100; } static void Main(string[] args) { Student s = new Student(); s.No = 10; change100(s); System.Console.WriteLine("s.No = " + s.No); } } 对方法中引用的操作会改变方法外实际对象的内容。 s.No = 100 A-PDF Split DEMO
地址传递-ref class hello World i static void change 100(ref int x) System. Console. Writeline("Inside method, x=+x); X=100 System. Console. WriteLine("Inside method, x=+x) static void Main(stringl args) int y =10 System. Console. WriteLine("Outside method,y=+y);Outside metho Inside method x=10 change 100(ref y); Inside method. x=100 System. Console. WriteLine(" Outside method, y=+y)Outside method, y= 对方法中形参的操作会改变方法外实参的值
地址传递-ref class HelloWorld { static void change100(ref int x) { System.Console.WriteLine("Inside method, x=" + x); x = 100; System.Console.WriteLine("Inside method, x=" + x); } static void Main(string[] args) { int y = 10; System.Console.WriteLine("Outside method, y=" + y); change100(ref y); System.Console.WriteLine("Outside method, y=" + y); } } • 对方法中形参的操作会改变方法外实参的值。 Outside method, y=10 Inside method, x=10 Inside method, x=100 Outside method, y=100 A-PDF Split DEMO
地址传递-out class hello World i static void change 100(int x, out int y) static void Main(string[ args) int x change 100(x, out y) System. Console. WriteLine(y=+y); 10 使用out关键字,可以将未初始化的变量 传递给方法,可以避免多余的初始化
地址传递-out class HelloWorld { static void change100(int x, out int y) { y = x; } static void Main(string[] args) { int x = 10, y; change100(x, out y); System.Console.WriteLine("y=" + y); } } • 使用out关键字,可以将未初始化的变量 传递给方法,可以避免多余的初始化。 y=10 A-PDF Split DEMO
变量和作用域 ·局部( local)变量:在一个方法内定义的变量,也被称作自 动( automatic)、临时( temporary)或栈( stack)变量 局部变量只在方法内部起作用。 当一个方法被执行时,局部变量被创建;当一个方法被终止时 局部变量被清除。 局部变量必须使用之前初始化,否则编译时将出错。 方法(包括构造函数)的入口参数是局部变量。 实例变量:在方法外而类的内部定义的变量,在使用 new XXXX(调用构造一个对象时被创建 类的实例变量有默认的初始值,可以不用显式初始化 局部变量可以取消非局部变量的作用 方法内声明的局部变量与类变量或实例变量可以重名。 此时缺省为局部变量。 若要使用类变量或实例变量,应使用this关键字
变量和作用域 • 局部(local)变量:在一个方法内定义的变量, 也被称作自 动(automatic)、临时(temporary)或栈(stack)变量。 局部变量只在方法内部起作用。 – 当一个方法被执行时, 局部变量被创建;当一个方法被终止时, 局部变量被清除。 – 局部变量必须使用之前初始化, 否则编译时将出错。 – 方法 (包括构造函数 )的入口参数是局部变量。 • 实例变量:在方法外而类的内部定义的变量,在使用 new Xxxx ()调用构造一个对象时被创建。 – 类的实例变量有默认的初始值,可以不用显式初始化。 • 局部变量可以取消非局部变量的作用 – 方法内声明的局部变量与类变量或实例变量可以重名。 – 此时缺省为局部变量。 – 若要使用类变量或实例变量,应使用this关键字。 A-PDF Split DEMO