在我的程序中,我有一个控制器,它根据用户请求创建新表单和将由这些表单使用的新对象。简而言之,这就是:
ClientForm clientForm = new ClientForm();
Client client = new Client();
clientForm.SetClient( client );
clientForm.Show();
SetClient
做了一些明显的事情:
Client _client;
public ClientForm()
{
InitializeComponent();
}
public void SetClient( Client client )
{
this._client = client;
}
如果我在_client
中尝试使用SetClient
,一切正常,但如果我尝试在事件处理程序中使用它,我会得到NullReferenceException
并且,事实上,简单的if检查表明_client
是null
。
为什么会这样?是超出范围还是什么?我该如何防止这种情况?
答案 0 :(得分:2)
我发布了一个答案,所以问题不会在没有答案的情况下停留。
我通常不喜欢在这里复制粘贴代码,因为我不是来这里要求其他人阅读我的代码并发现语法错误/拼写错误等 - 或者至少我尝试过。
因此,我删除了所有额外内容的代码,并确保使用简单版本重现该错误。然后我重新阅读它,以确保它看起来很好,易于阅读,我看到了它。
我在Main做了一些事情,因为这是为了测试一些想法而制作的一个程序。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault( false );
LauncherForm launcher = new LauncherForm();
Client client = new Client( "test" );
launcher.SetClient( client );
Application.Run( new LauncherForm() );
}
}
就在这里,主演我的眼睛:Application.Run( new LauncherForm() );
应该是Application.Run( launcher );
这可以通过评论中有人建议的.GetHashCode
解决方案进行观察(解决方案我确定从现在开始使用此类事情时会发生这种情况,所以谢谢)。我的简单方法(查看_client
中SetClient
的方式)是错过了这一点。