首页 > 代码库 > 值参数和引用参数
值参数和引用参数
值参数方法被调用时系统做如下操作:1.在栈中为形参分配空间;2.将实参的值复制给形参;在变量用作实参前,变量必须要被赋值(除非是输出参数),对于引用类型,变量可以被设置为一个实际的引用或null。
namespace ConsoleApplication1{ class A { public int val=10; } class Program { static void method(A obj2,int f1) { obj2.val = obj2.val + 5; f1 = f1 + 3; Console.WriteLine("{0} {1}", obj2.val,f1); } static void Main(string[] args) { A obj = new A(); int t = 13; method(obj,t); Console.WriteLine("{0} {1}", obj.val, t); Console.ReadLine(); } }}
引用参数
使用引用参数时,必须在方法的声明和调用都使用ref修饰符。实参必须是变量,在用作实参前必须被赋值。如果是引用类型变量,可以赋值为一个引用或者null;对于值参数系统在栈上为形参分配内存,相反,引用参数具备以下特征:
1.不会为形参在栈上分配内存;
2.形参的参数名作为实参变量的别名,指向相同的内存位置。
class Program { static void method(ref A obj2,ref int f1) { obj2.val = obj2.val + 5; f1 = f1 + 3; Console.WriteLine("{0} {1}", obj2.val,f1); } static void Main(string[] args) { A obj = new A(); int t = 13; method(ref obj,ref t); Console.WriteLine("{0} {1}", obj.val, t); Console.ReadLine(); } }
引用类型作为值参数
对于一个引用类型对象,不管是将他作为值参数还是引用参数传递,我们都可以在方法内部修改他的成员值。
namespace ConsoleApplication1{ class A { public int val=10; } class Program { static void method(A obj2) { obj2.val = 5; Console.WriteLine("{0}", obj2.val); obj2 = new A(); Console.WriteLine("{0}", obj2.val); } static void Main(string[] args) { A obj = new A(); Console.WriteLine("{0}", obj.val); method(obj); Console.WriteLine("{0}", obj.val); Console.ReadLine(); } }}
将引用类型的对象作为值参数传递,如果在方法内部创建一个新的对象赋值给形参,将切断形参和实参之间的联系,并且在方法结束后,新的对象也将不复存在。
引用类型作为引用参数
namespace ConsoleApplication1{ class A { public int val=10; } class Program { static void method(ref A obj2) { obj2.val = 5; Console.WriteLine("{0}", obj2.val); obj2 = new A();//此时分配的内存形参和实参都指向这一块内存,就算方法执行完后,也不会释放的,obj将指向这块内存 Console.WriteLine("{0}", obj2.val); } static void Main(string[] args) { A obj = new A(); //static void method(ref A obj2){....}方法执行完后这个内存将会被垃圾收集器自动收集 Console.WriteLine("{0}", obj.val); method(ref obj); Console.WriteLine("{0}", obj.val); Console.ReadLine(); } }}
值参数和引用参数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。