【发布时间】:2009-07-17 21:10:35
【问题描述】:
好的,我有一个静态类,它有两个静态成员,一个字符串和一个布尔值。
公共静态方法根据传入参数的状态为这些成员分配值。
然后调用处理静态成员的私有静态方法。
问题在于,虽然布尔值保留了它在公共函数中设置的值,但字符串却没有;它默认回到它的初始化值。这是为什么呢?
简化代码如下。
static class MessageHandler
{
private static String m_messageToSend = String.Empty;
private static bool m_requiresACK = false;
public static void Send(String message)
{
//formatting etc (actual method sets more fields)
m_messageToSend = message;
m_requiresACK = true;
Send();
}
private void static Send()
{
SendMessageDelegate sendDelegate = DoSend;
//At this point m_requiresACK remains true but m_messageToSend does not
//hold value of message; it is empty.
IAsyncResult ar = sendDelegate.BeginInvoke(m_messageToSend, m_requiresACK);
//rest of function
}
}
//some other class
MessageHandler.Send("Hello");
【问题讨论】:
-
您确定它在 Send(string) 方法中被正确分配。你在简化 tge 代码的时候忘了提什么吗?
-
为什么这是一个静态类?
-
Devio- 也许不应该,我还在学习。这似乎是最优雅的解决方案,并且不需要创建对象。类名不是很好,需要更改 - MessageHandler 可能因为它转发它们。 MessageHandler.Send(消息)。
标签: c# static-members