CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

方法的参数的按值传递或按引用传递问题?为什么方法可改变类的值,却不改变结构的值?

楼主AiQun(爱麇)2002-09-17 11:27:59 在 .NET技术 / C# 提问

 
  方法的参数的按值传递或按引用传递问题?为什么方法可改变类的值,却不改变结构的值?  
   
  class   test  
  {  
  static   void   Main()  
  {  
  type   t=new   type("---");  
  gt(t);  
  System.Console.WriteLine("STURCT   X   =   {0}",t.x);  
   
  cls   s     =   new   cls("class.x"),tmp;  
  gt(s);  
  System.Console.WriteLine("CLASS.s   X   =   {0}",s.x);  
   
  }  
  private   static   void   gt(cls   t)  
  {  
  t.p=new   cls("class.p.x");  
  }  
   
  private   static   void   gt(type   t)  
  {  
  t.x="struct.x";  
  }  
   
  ///   ///////////////////////////////////////////////////////////  
   
  struct   type  
  {  
  public   string   x;  
  public   type(string   s)  
  {x=s;}  
  }  
  class   cls  
  {  
  public   string   x;  
  public   cls   p;  
   
  public   cls(string   s)  
  {  
  x=s;  
  }  
  }  
  } 问题点数:20、回复次数:10Top

1 楼TheAres(班门斧)回复于 2002-09-17 11:40:49 得分 5

类是引用类型,结构是值类型  
  ----------------------------------------  
  To   teach   a   fish   how   to   swim.  
  Top

2 楼AiQun(爱麇)回复于 2002-09-17 18:02:44 得分 0

谢谢TheAres(班门斧)   :不过坏事还继续来.Top

3 楼TheAres(班门斧)回复于 2002-09-19 13:39:21 得分 0

什么意思,"坏事还继续来",   我有些上年纪了...  
   
  你不能说说你想要什么?Top

4 楼yarshray(saga jion(心飘情落))回复于 2002-09-19 13:56:59 得分 0

你是问为什么吗?  
  不要静态就可以了!Top

5 楼AiQun(爱麇)回复于 2002-09-20 08:38:03 得分 0

http://www.csdn.net/expert/topic/1036/1036250.xml?temp=.3493463Top

6 楼snewxf(心疤)回复于 2002-09-20 14:04:48 得分 10

class   test  
  {  
   
  static   void   Main()  
  {  
  test   te=new   test();//**改了。  
  type   t=new   type("---");  
  te.gt(t);  
  System.Console.WriteLine("STURCT   X   =   {0}",t.x);  
   
  cls   s     =   new   cls("class.x");  
  te.gt(s);  
  System.Console.WriteLine("CLASS.s   X   =   {0}",s.x);  
   
  }  
  private     void   gt(cls   t)  
  {  
  t.p=new   cls("class.p.x");  
  }  
   
  private   void   gt(type   t)  
  {  
  t.x="struct.x";  
  }  
   
  ///   ///////////////////////////////////////////////////////////  
   
  struct   type  
  {  
  public   string   x;  
  public   type(string   s)  
  {x=s;}  
  }  
  class   cls  
  {  
  public   string   x;  
  public   cls   p;  
   
  public   cls(string   s)  
  {  
  x=s;  
  }  
  }  
  }  
  C#中的参数是按值传递的。也就是它传递的是一个考贝。。所以不能修改。  
  改成这样的话。它就是引用传递。  
  using   System;  
   
  namespace   test3  
  {  
  ///   <summary>  
  ///   Class1   的摘要说明。  
  class   test  
  {  
   
  static   void   Main()  
  {  
  test   te=new   test();  
  type   t=new   type("---");  
  te.gt(ref   t);  
  System.Console.WriteLine("STURCT   X   =   {0}",t.x);  
   
  cls   s     =   new   cls("class.x");  
  te.gt(ref   s);  
  System.Console.WriteLine("CLASS.s   X   =   {0}",s.x);  
   
  }  
  private     void   gt(ref   cls   t)  
  {  
  t.p=new   cls("class.p.x");  
  t=t.p;//******注意这儿改了。  
  }  
   
  private   void   gt(   ref   type   t)  
  {  
  t.x="struct.x";  
  }  
   
  ///   ///////////////////////////////////////////////////////////  
   
  struct   type  
  {  
  public   string   x;  
  public   type(string   s)  
  {x=s;}  
  }  
  class   cls  
  {  
  public   string   x;  
  public   cls   p;  
   
  public   cls(string   s)  
  {  
  x=s;  
  }  
  }  
  }  
   
  }  
  反正只要你想按引用传递参数的话就得用关健字REF,或是OUT!Top

7 楼snewxf(心疤)回复于 2002-09-20 14:07:20 得分 0

当然不论gt函数不论是静态还是非静态函数!!!!  
  我都试过了。Top

8 楼AiQun(爱麇)回复于 2002-09-20 14:30:51 得分 0

to:yarshray(saga   jion):  
  静态还是非静态函数没有关系吧,我试过了,结果也一样!  
   
  to   snewxf(心疤):  
  你也差不多理解我的想法了,我要问的问题是:在不加ref的前提下为什么可以修改类的属性,但就不能修改它自己的引用(指定另一个类)?Top

9 楼cnuninet()回复于 2002-09-20 14:32:36 得分 5

类是按照引用传递的,类似于指针。  
  而结构是按照传值的方式传递的(先复制,再将复制后的结构传递),因此无法改变原先的值,Top

10 楼AiQun(爱麇)回复于 2002-09-20 15:36:50 得分 0

按这种说法"类是按照引用传递的,类似于指针。"就引出了下面的问题,请看:  
  http://www.csdn.net/expert/topic/1036/1036250.xml?temp=.3493463Top

相关问题

  • 当对象作为函数或过程的参数的时候, 如何避免使用默认的引用传递方式, 改为值传递????
  • *** 有人在家吗? 参数引用问题, LPVOID参数 传递引用
  • 大家帮忙看一下关于JAVA是参数传递是传值还是传引用的问题???
  • 为什么拷贝构造函数的参数必须是引用的?可不可以采用值传递?
  • 【请教】关于Java函数传递参数的类型(传值还是传引用)
  • 关于值传递和引用传递的小问题
  • 函数调用(按值传递和按引用传递?).....
  • 怎样传递参数的多个值?
  • response.redirect能不能传递参数值
  • 函数的参数传递数值!?

关键词

  • .net
  • 结构
  • 函数
  • 修改
  • 值
  • 引用
  • cls
  • 传递
  • gt
  • 参数

得分解答快速导航

  • 帖主:AiQun
  • TheAres
  • snewxf
  • cnuninet

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo