Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can I create an instance of a class without storing it to a variable and still have everything work?

I have a non-static class called ImplementHeaderButtons which contains a non-static public method called Implement. The name of the class and method are not important, what's important is that they are not static, so they need to be instantiated in order to be used, right?

So I used to do this:

var implementHeaderButtons = new ImplementHeaderButtons();
implementHeaderButtons.Implement(this, headerButtons);

But then I decided to play around a bit with it (actually I was looking for a way to make it a one-liner) and I concluded that the following code works just as well:

new ImplementHeaderButtons().Implement(this, headerButtons);

Now, I do not need a variable to hold the instance, but my question is: how come I can create a new instance of a class on the fly and call a method of it without having a variable to store the instance?

I wouldn't be surprised if it didn't work as intended, but it does.

like image 305
IneedHelp Avatar asked Jan 15 '23 12:01

IneedHelp


1 Answers

they are not static, so they need to be instantiated in order to be used, right?

Yes, but you are still instantiating the class with new ImplementHeaderButtons(), you just aren't storing a reference to that newly created instance anywhere.

You can still call a method on this instance as you have done in your example, but you will not be able to do anything else with it afterwards without a reference. Eventually the instance will be cleaned up by the garbage collector (provided the method you call does not store a reference to the object somewhere).

like image 123
verdesmarald Avatar answered Feb 21 '23 23:02

verdesmarald