How would you share the same object between two other objects? For instance, I'd like something in that flavor:
class A
{
   private string foo_; // It could be any other class/struct too (Vector3, Matrix...)
   public A (string shared)
   {
       this.foo_ = shared;
   }
   public void Bar()
   {
       this.foo_ = "changed";
   }
}
...
// inside main
string str = "test";
A a = new A(str);
Console.WriteLine(str); // "test"
a.Bar();
Console.WriteLine(str); // I get "test" instead of "changed"... :(
Here, I don't want to give a ref to the Bar method. What I want to achieve is something that would look like that in C++:
class A
{
  int* i;
public:
  A(int* val);
};
A::A (int* val)
{
  this->i = val;
}
I read there is some ref/out stuff, but I couldn't get what I'm asking here. I could only apply some changes in the methods scope where I was using ref/out arguments... I also read we could use pointers, but is there no other way to do it?
This has nothing to do with sharing objects. You passed a reference to a string into the A constructor. That reference was copied into the private member foo_. Later, you called B(), which changed foo_ to "changed".
At no time did you modify str. str is a local variable in main. You never passed a reference to it.
If you had wanted to change str, you could have defined B as
   public void Bar(ref string s)
   {
     this.foo_ = "changed";
     s = this.foo_;
   }
Consider:
public class C
{
    public int Property {get;set;}
}
public class A
{
    private C _c;
    public A(C c){_c = c;}
    public void ChangeC(int n) {_c.Property = n;}
}
public class B
{
    private C _c;
    public B(C c){_c = c;}
    public void ChangeC(int n) {_c.Property = n;}
}
in main:
C myC = new C() {Property = 1;}
A myA = new A(myC);
B myB = new B(myC);
int i1 = myC.Property; // 1
myA.ChangeC(2);
int i2 = myC.Property; // 2
myB.ChangeC(3);
int i3 = myC.Property; // 3
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With