Brad
Brad

Reputation: 43

How to Retrieve Updated Values from a Class in C#?

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

Answers (2)

Julio Fuentes
Julio Fuentes

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

pm100
pm100

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

Related Questions