方法的参数的按值传递或按引用传递问题?为什么方法可改变类的值,却不改变结构的值?
方法的参数的按值传递或按引用传递问题?为什么方法可改变类的值,却不改变结构的值?
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




