检索在另一个 class 中设置的值

Retrieving a value in one class that is set in another

希望你们一切都好。

我在大学的任务中遇到了一个小问题,我在一个名为 Alpha 的 class 中有一个变量,我想在其中更改值到用户输入的内容。对于名为 Charlie 的第二个 class,我想使用用户输入的相同值。我理解为什么我的工作不起作用,但我不知道我是否缺少使其工作的基本要素。

这只是玩具代码,并不是我的实际工作,但是,这准确反映了我遇到的问题。

    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();
        }
    }

您需要将 alpha 实例传递给 charlie

    charlie.Delta(this);

    public void Delta(Alpha alpha)
    {

        Console.WriteLine("Charlie() says, " + alpha.message);
    }

这是因为您可以有多个不同的 alpha 和不同的消息。在您当前的代码中,您创建了一个与调用 charlie.delta.

无关的新 alpha

另一种可能是静态数据。在这种情况下,它只出现一次

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();
    }
}

    public void Delta()
    {
     

        Console.WriteLine("Charlie() says, " + Alpha.message);
    }

您还可以在第三个 class 中提取 read/write 消息的代码,并将其作为依赖项传递给 A​​lpha查理.

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}");
    }
}

然后像这样更新其余部分:

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();
    }
}