我在访问使用其他方法创建的对象时遇到问题。
internal class Connect
{
private ServerSession session;
private ClientProperties properties;
public void initialize()
{
this.properties = new ClientProperties("PropertyA", "PropertyB");
// the code for ServerSession() resides in a separate class file
session = new ServerSession(properties);
// this is a pseudo event handler...I have real eventhandlers in my application (I just can't share due to NDA)
session.eventHandler_1(new EventHanlder<Method>(this.method_1));
}
public void disconnect()
{
session.Disconnect();
}
public void connect(string server)
{
session.Connect(server, 1234);
}
}
此应用程序用于连接到网络。我需要initialize
函数来初始化网络协议(首次初始化应用程序时,在Program.cs
文件中访问此方法。)
我遇到的问题是从我的应用程序WinForm访问Object reference not set to an instance of an object
方法时出现connect()
错误。
摘录form.cs
namespace MyApplication
{
public partial class MainForm : Form
{
Connect server = new Connect();
// this method is called when I establish a connection to the network
private void connectServer()
{
server("123.456.789");
}
}
}
如何在不抛出此错误的情况下正确访问connect()
方法。我知道这是因为对象由于某种原因是空的,但我不明白为什么因为它是在同一个类中初始化的。
答案 0 :(得分:1)
永远不会调用initialize
类的Connect
方法,因此对象的session
对象永远不会被初始化。要解决这个问题,您应该首先调用该方法。
或者,将初始化代码移动到构造函数:
internal class Connect
{
private ServerSession session;
public Connect ()
{
session = new ServerSession();
// stuff
}
// …
}
正如您在评论中提到的那样,您在应用程序启动时在其他位置设置了Connect
的实例,然后希望它出现在您的表单中。但是,这不是对象的工作方式。在执行new Connect()
时,您正在创建一个 new 对象 - 这就是它的全部要点。如果您不想创建新对象,则不要创建新对象,而是重用已创建的对象。
有多种方法可以做到这一点。最干净的方法是使用将现有实例传递给MainForm
。例如,通过表单的构造函数,或通过定义您设置的属性:
public partial class MainForm : Form
{
public Connect Server
{ get; set; }
private void connectServer()
{
Server.connect("123.456.789");
}
}
然后在Main
中,您可以执行以下操作:
Connect connect = new Connect();
MainForm form = new MainForm();
form.Server = connect;
form.Show();
答案 1 :(得分:0)
正如poke所提到的,请务必先调用initialize
方法。您还需要确保调用connect
方法。所以像这样:
public partial class MainForm : Form
{
Connect server = new Connect();
server.initialize(); // call your initialize method
private void connectServer()
{
server.connect("123.456.789"); // call the connect method here
}
}