+ 1

Where did I go wrong?

I am trying to change the name attribute of ins1 instance.. but its showing an error.. Why?? https://code.sololearn.com/cQbTD5n7Tig1/?ref=app

27th Aug 2021, 3:03 AM
Samael Morningstar
16 odpowiedzi
+ 3
You don't need the "out" specifiers. Without them your program works just fine. https://code.sololearn.com/cWk2jLO4TaWp/?ref=app
28th Aug 2021, 11:17 PM
Евгений
Евгений - avatar
+ 2
Change out to ref.
27th Aug 2021, 3:10 AM
你知道規則,我也是
你知道規則,我也是 - avatar
+ 2
Samael Morningstar Yes, it creates a completely new object to get the job done because your out parameter is a class. The first object is probably disposed by the garbage collector, what it does is to change the object completely with its field assigned with a name before leaving the method.
27th Aug 2021, 4:15 AM
Tim
Tim - avatar
+ 2
Samael Morningstar Seems like you're trying to practice with classes. I'd suggest declaring the method in that class rather than in Program where Main exists, at least this is how I would write it: class Person { public string name; public string Name { get { return name; } set { name = value; } } public void UpdateName(string name) { Name = name; } } class Program { static void Main() { Person p1 = new Person(); p1.UpdateName("Mehedi"); Console.WriteLine(p1.Name); } } My brain is kinda burned here, have a good day.
27th Aug 2021, 4:40 AM
Tim
Tim - avatar
+ 2
Samael Morningstar No problem at all 👍 Let me know if you have more questions
27th Aug 2021, 4:54 AM
Tim
Tim - avatar
+ 2
Samael Morningstar Every variable is unique so you probably should change the name of the other variable
27th Aug 2021, 5:23 AM
Tim
Tim - avatar
+ 1
Samael Morningstar The memory address of ins1 is never updated/changed, which is why it doesn't work, instead of passing the class as a parameter, pass in the field of the class instead, Here's a workaround: void ChangeName(out Method method) { method = new Method(); method.name = "Mehedi"; } Here's the solution I was talking about by passing the field directly: void ChangeName(out string name) { name = "Mehedi"; } And call it like this in the Main method: instance1.ChangeName(out ins1.name);
27th Aug 2021, 4:01 AM
Tim
Tim - avatar
+ 1
Nick 😂😂 Thanks a lot, Nick.. I am playing with methods..
27th Aug 2021, 4:50 AM
Samael Morningstar
+ 1
Nick Hm.. I may have more.. But for now, I will try to understand what you have said and go deeper.. Thanks
27th Aug 2021, 4:58 AM
Samael Morningstar
+ 1
Samael Morningstar Idk if I can share my Discord info here because it's very hard to explain here on Sololearn
27th Aug 2021, 5:39 AM
Tim
Tim - avatar
+ 1
Check your messages Samael Morningstar
27th Aug 2021, 5:48 AM
Tim
Tim - avatar
+ 1
On Sololearn, there's messages
27th Aug 2021, 5:51 AM
Tim
Tim - avatar
0
CarrieForle But why this code isn't not working??
27th Aug 2021, 3:34 AM
Samael Morningstar
0
Nick https://code.sololearn.com/crpZDE1F3B57/?ref=app Why this time it's not creating a new object?? (With the same name)
27th Aug 2021, 5:20 AM
Samael Morningstar
0
So, the thing here is going on is.. We declared and instance which refers to an object inside Main method.. And our other methods didn't receive it because it's a local variable.. Though we can change it via methods with ref type parameter or value parameter.. But I want to do it with out type parameter.. Nick, what if we send the address of our first object to ins (my first codebit) or (y--- my second codebit) instead of creating a new object??.. Ah.. that can be done with ref type parameter.. But I want to know about out type parameter Note: Let's do this experiment with my second codebit.. easier to read https://code.sololearn.com/crpZDE1F3B57/?ref=app
27th Aug 2021, 5:35 AM
Samael Morningstar
0
Nick It's meaningless doing all these.. we can do in other ways.. But my question is.. out type parameter helps us to console something, doesn't it?? or whatever.. but why it's making problem while doing the same thing, which we did with other type parameters..
27th Aug 2021, 5:43 AM
Samael Morningstar