Hi I am working with code that looks something like this .
class A
{
Custom objA;
public A()
{
//Assign some value to objA;
B obj =
It seems to me that this is the code that you're asking about in your question:
class A
{
Custom objCustom;
public A()
{
objCustom = new Custom();
B objB = new B(objCustom);
objB.Func();
}
}
class B
{
Custom objCustom;
public B(Custom objCustom)
{
this.objCustom = objCustom;
}
public void Func()
{
this.objCustom = null;
}
}
This compiles and has a fairly consistent naming convention.
The issue you have the with the Custom objCustom field in both class A and B is that even though they both reference the same instance before the call to .Func() you need to understand that the Custom objCustom field is just a reference to the object, and not the object itself. So when you call .Func() you are assigning a new reference to the Custom objCustom in objB, but you're not doing anything to the reference in objA. It still points to the original object.
In function Func you assign null to the field of B object (not A object) so after this function call field objB of B object is not pointing to any object of type Custom, but objA field of A object is still pointing to a single Custom object.
Here is example of code, where Func will change objA field of A object:
class A
{
public Custom objA = new Custom();
public A()
{
B obj = new B(this);
B.Func(); // after this, objA field will be null
}
}
class B
{
А obj;
public B(А obj)
{
this.obj = obj;
}
public void Func()
{
obj.objA = null;
}
}
Also note:
A object, its objA field is null, so in constructor of A you actually calling B obj = new B(null);, so its objB field is null too.A object is constructed, object obj of type B will be disposed, since you don't hold a reference to it, so you not calling a Func function in your example.Firstly, on line 5, you have a syntax error. You could do B obj = new B(objA) if you are trying to create a new instance of B. But I can only guess.
What it seems like you are trying to do is modify objA by having passed it into a new object of type B, storing it in a field, and then modifying the field. The problem is that what you are storing is a copy of a reference to objA. When you do this.objB = null, you are modifying the field objB to have a new reference (null), but you have not done anything to the field objA which is a member of the instance of class A.