110,536
社区成员
发帖
与我相关
我的任务
分享
void f1(ClassA a)
{
a = new ClassA();
a.x = 5;
}
void f2(ref Class a)
{
a = new ClassA();
a.x = 5;
}
ClassA a = new ClassA();
a.x = 1;
f1(a); // a.x == 1
f2(a); // a/x == 5
[/quote]
我的天。。。。
引用类型压根不需要用ref和 out
引用类型已经传递了引用。
static void Main(string[] args)
{
ClassA a = new ClassA();
a.x = 1;
f1(a);
Console.WriteLine(a.x);
Console.ReadLine();
}
static void f1(ClassA a)
{
a.x = 5;
}
[/quote]你看到方法里面的new了吗?引用类型和引用传值,你搞混了
void f1(ClassA a)
{
a = new ClassA();
a.x = 5;
}
void f2(ref Class a)
{
a = new ClassA();
a.x = 5;
}
ClassA a = new ClassA();
a.x = 1;
f1(a); // a.x == 1
f2(a); // a/x == 5
[/quote]
我的天。。。。
引用类型压根不需要用ref和 out
引用类型已经传递了引用。
static void Main(string[] args)
{
ClassA a = new ClassA();
a.x = 1;
f1(a);
Console.WriteLine(a.x);
Console.ReadLine();
}
static void f1(ClassA a)
{
a.x = 5;
}
void f1(ClassA a)
{
a = new ClassA();
a.x = 5;
}
void f2(ref Class a)
{
a = new ClassA();
a.x = 5;
}
ClassA a = new ClassA();
a.x = 1;
f1(a); // a.x == 1
f2(a); // a/x == 5
A a_1 = new A(); //假设a_1指向的地址为0x0001 即a=0x0010
a_1.Text = "test_a_1";
A a_2 = new A(); //假设a_2指向的地址为0x0002 即a=0x0020
a_2.Text = "test_a_2";
Test_1(a_1); //将0x0010 传入
Test_2(ref a_2); //将0x0020 所在的地址 0x0002传入
Console.WriteLine(a_1.Text);//输出为Test_1 因为a_1指向的是0x0010上面的A
Console.WriteLine(a_2.Text);//暑促为test_2_new 因为a_2的0x0020被修改成了0x0040
//==输出结果
Test_1
Test_2_new
public class A {
public string Text;
}
//默认对象传入的是引用(对象的地址)
public void Test_1(A a) { //此时a是指向一个A的地址(0x0010)
a.Text = "Test_1"; //通过a来访问A在内存中(0x0010)的数据
a = new A(); //此时创建了一个新的A(假设地址为0x0030) 并把地址给了;
a.Text = "Test_1_new"; //这里只会修改到0x0003上面的A
}
//加了ref就表示传入地址 而对象本生就是传地址的 所以此时传入的是地址指针(地址的地址) 0x0020这个值的地址
public void Test_2(ref A a) {
a.Text = "Test_2"; //方位到的是0x0020上面的对象
a = new A(); //创建一个新的A(0x0040) 并将其地址写入到0x0002这个地址(覆盖原来的0x0020)
a.Text = "Test_2_new"; //修改的是0x0040上面的对象
}
static void Main(string[] args)
{
int a = 0;
Test(a);
Console.WriteLine(a); // 0
Test(ref a);
Console.WriteLine(a); // 10
Console.ReadLine();
}
public static void Test(int a)
{
a = 10;
}
public static void Test(ref int a)
{
a = 10;
}