I have 2 classes both non-static. I need to access a method on one class to return an object for processing. But since both classes is non-static, I cant just call the method in a static manner. Neither can I call the method in a non-static way because the program doesnt know the identifier of the object.
Before anything, if possible, i would wish both objects to remain non-static if possible. Otherwise it would require much restructuring of the rest of the code.
Heres the example in code
class Foo
{
Bar b1 = new Bar();
public object MethodToCall(){ /*Method body here*/ }
}
Class Bar
{
public Bar() { /*Constructor here*/ }
public void MethodCaller()
{
//How can i call MethodToCall() from here?
}
}
In order for any code in a static or a non-static class to call a non-static method, the caller must have a reference to the object on which the call is made.
In your case, Bar
's MethodCaller
must have a reference to Foo
. You could pass it in a constructor of Bar
or in any other way you like:
class Foo
{
Bar b1 = new Bar(this);
public object MethodToCall(){ /*Method body here*/ }
}
Class Bar
{
private readonly Foo foo;
public Bar(Foo foo) {
// Save a reference to Foo so that we could use it later
this.foo = foo;
}
public void MethodCaller()
{
// Now that we have a reference to Foo, we can use it to make a call
foo.MethodToCall();
}
}
class Bar
{
/*...*/
public void MethodCaller()
{
var x = new Foo();
object y = x.MethodToCall();
}
}
BTW, in general, objects don't have names.
By passing an instance to the constructor:
class Bar
{
private Foo foo;
public Bar(Foo foo)
{
_foo = foo;
}
public void MethodCaller()
{
_foo.MethodToCall();
}
}
Usage:
Foo foo = new Foo();
Bar bar = new Bar(foo);
bar.MethodCaller();
Try this:
class Foo
{
public Foo() { /*Constructor here*/ }
Bar b1 = new Bar();
public object MethodToCall(){ /*Method body here*/ }
}
Class Bar
{
public Bar() { /*Constructor here*/ }
Foo f1 = new Foo();
public void MethodCaller()
{
f1.MethodToCall();
}
}