I was playing little bit with classes. Idea is to see how it will behave if we declare method with type as current class instance to which this method belong.
So, I have declared class like:
public class MyClass { public string mOne = "none"; public string mTwo = "none"; public string mAll = "none"; public MyClass MyMethodOne() { this.mOne = "I am from method one"; this.mAll = "My name is all and I am also from method one"; return this; } public MyClass MyMethodTwo() { this.mTwo = "I am from method two"; this.mAll = "My name is all and I am also from method two"; return this; } public MyClass MyMethodNewInstanceOne() { MyClass something = new MyClass(); something.mOne = "I am from method one"; something.mAll = "My name is all and I am also from method one"; return this; } public MyClass MyMethodNewInstanceTwo() { MyClass something = new MyClass(); something.mTwo = "I am from method two"; something.mAll = "My name is all and I am also from method two"; return something; } }
Notice for example:
this.mTwo = "I am from method two";
return this;
Here we are not creating new instance, so if we do call like:
MyClass myClassesResult = playingWithClasses.MyMethodOne().MyMethodTwo();
We will not loose any changes
That means that if we create console application like:
MyClass playingWithClasses = new MyClass(); MyClass myClassesResult = playingWithClasses.MyMethodOne().MyMethodTwo(); Console.WriteLine("************* without new instance *************"); Console.WriteLine("One: " + myClassesResult.mOne); Console.WriteLine("Two: " + myClassesResult.mTwo); Console.WriteLine("All: " + myClassesResult.mAll);
Result will be like:
************* without new instance *************
One: I am from method one
Two: I am from method two
All: My name is all and I am also from method two
Then notice for example:
MyClass something = new MyClass();
something.mTwo = "I am from method two";
return something;
That means that if we create console application like:
MyClass playingWithClasses = new MyClass(); MyClass myClassesNewInstanceResult = playingWithClasses.MyMethodNewInstanceOne().MyMethodNewInstanceTwo(); Console.WriteLine("************* with new instance *************"); Console.WriteLine("One: " + myClassesNewInstanceResult.mOne); Console.WriteLine("Two: " + myClassesNewInstanceResult.mTwo); Console.WriteLine("All: " + myClassesNewInstanceResult.mAll);
Result will be like:
************* with new instance *************
One: none
Two: I am from method two
All: My name is all and I am also from method two
Example project you can download from here.