我面临着从 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
类中检索更新后的值吗?
你需要将 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);
}
您还可以提取代码以在第三个类中读取/写入消息,并将其作为依赖项传递给Alpha和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}");
}
}
然后更新其余部分,例如:
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();
}
}