Reputation: 43
I am facing an issue with retrieving updated values from a class in C#. Here's the scenario:
I have two classes, Alpha
and Charlie
. In the Alpha
class, I have a string variable named message
, and I want to update its value based on user input in the Bravo()
method. However, when I try to access this updated value from the Charlie
class, it still shows the initial value.
Here's my code:
Code:
class Alpha
{
public string message = "hello.";
public void Bravo()
{
Charlie charlie = new Charlie();
Console.WriteLine("Enter message here:");
message = Console.ReadLine();
Console.WriteLine("Alpha() says, " + message + ".");
charlie.Delta();
}
}
class Charlie
{
public void Delta()
{
Alpha alpha = new Alpha();
Console.WriteLine("Charlie() says, " + alpha.message);
}
}
class Program
{
static void Main(string[] args)
{
Alpha alpha = new Alpha();
alpha.Bravo();
}
}
I understand that my approach isn't yielding the desired results, but I'm unsure of what fundamental concept I might be missing to make it work. Could someone please guide me on how to correctly retrieve the updated value from the Alpha
class in the Charlie
class?
Upvotes: 0
Views: 70
Reputation: 41
You could also extract the code to read/write the message in a third class and pass it as a dependency to Alpha and Charlie.
class Message
{
private string _message = "hello.";
public void Read()
{
Console.WriteLine("Enter message here:");
_message = Console.ReadLine();
}
public void Write(string from)
{
Console.WriteLine($"{from}() says ,{_message}");
}
}
And then update the rest like:
class Alpha
{
private readonly Message _message;
private readonly Charlie _charlie;
public Alpha(Message message)
{
_message = message;
_charlie = new Charlie(message);
}
public void Bravo()
{
_message.Write(nameof(Alpha));
_charlie.Delta();
}
}
class Charlie
{
private readonly Message _message;
public Charlie(Message message)
{
_message = message;
}
public void Delta()
{
_message.Write(nameof(Charlie));
}
}
class Program
{
static void Main(string[] args)
{
Message message = new Message();
message.Read();
Alpha alpha = new Alpha(message);
alpha.Bravo();
}
}
Upvotes: 0
Reputation: 50120
you need to pass the alpha instance to charlie
charlie.Delta(this);
and
public void Delta(Alpha alpha)
{
Console.WriteLine("Charlie() says, " + alpha.message);
}
this is because you can have multiple different alphas with different messages. In your currebt code you creat a new alpha that has nothing to do with the one that called charlie.delta.
Another possibility is to have static data. In this case there is only one occurrence of it
class Alpha
{
public static string message = "hello.";
.....
public void Bravo()
{
Charlie charlie = new Charlie();
Console.WriteLine("Enter message here:");
Alpha.message = Console.ReadLine();
Console.WriteLine("Alpha() says, " + message + ".");
charlie.Delta();
}
}
and
public void Delta()
{
Console.WriteLine("Charlie() says, " + Alpha.message);
}
Upvotes: 1