检索一个类中设置在不同类中的值

问题描述 投票:0回答:2

我面临着从 C# 类中检索更新值的问题。这是场景:

我有两个班级,

Alpha
Charlie
。在
Alpha
类中,我有一个名为
message
的字符串变量,我想根据
Bravo()
方法中的用户输入更新其值。但是,当我尝试从
Charlie
类访问此更新值时,它仍然显示初始值。

这是我的代码:

代码:

    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
类中检索更新后的值吗?

c# class oop
2个回答
1
投票

你需要将 alpha 实例传递给 charlie

    charlie.Delta(this);

    public void Delta(Alpha alpha)
    {

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

这是因为你可以有多个不同的阿尔法和不同的消息。在您当前的代码中,您创建了一个新的 alpha,它与名为 charlie.delta 的代码无关。

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

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

0
投票

您还可以提取代码以在第三个类中读取/写入消息,并将其作为依赖项传递给AlphaCharlie

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.