有这么一个情况class A {
    public Size max;
}class B {
    private Size max;
    public B(ref Size s) {
        max = s;
    }
}// 在 一个函数中做这个调用
class Main {
    public main() {
        A a = new A();
        B b = new (a.max);
        
        // ??? 这个地方当 a 的 max 改变时, b 的max 是否会改变
        a.max.Width = 100;
        
        // ??? 这里呢
        a.max = new Size(20, 20);
    }
}
补充问题,C# 中的值类型,如果像 C# 中的引用类型一样使用,就是像C++中的指针,改变一个地方,其它地方也跟着改变

解决方案 »

  1.   

    不会改变,除非你直接在ref或out下面改变他的值。
    补充问题:
    那就一直ref/out着走。
      

  2.   

    引用就加上  ref 或 out
      

  3.   

    A 类 和 B 类 中的 会改,因为 你 A,B 是引用类型。 不是结构体。
    Sise 是结构体 但是 他是 A,B中的成员,所以。你用 a.ssss.ssssw 的方式 会改变。
      

  4.   

    不会改变,B里的max和A里的max是两个值,最多只是复制它的值过去,A还是A,B还是B。你似乎没搞明白ref的用意。
      

  5.   

    引用ref或out,out要先赋值 
      

  6.   

    正如 你用 class A
    {
     int I{get;set;}
    }A a = new A();
    a.I = 123;一样, 一定会改变。
      

  7.   

    我的想法是如果要实现这样的功能要如何像C ++class A {
        public Size max;
    }class B {
        Size *max;
        public B(Size *s) {
            max = s;
        }
    }// 调用
    A a;
    B b(&a.max);像这种在 C# 中该如何实现
      

  8.   


    使用unsafe的代码就可以了。
    unsafe class B {
        Size *max;
        public B(Size *s) {
            max = s;
        }
    }
      

  9.   

    class A
        {
            public Size[] max=new Size[1];
        }    class B
        {
            private Size[] max;
            public B(Size[] s)
            {
                max = s;
            }
        }