C# 如何:从(静态)方法返回对象?
我正在为作业调度器使用C2.0构建一个WinForms应用程序 在Program.cs中编写了定义作业对象的公共类作业 还在Program.cs中编写了一个公共静态类ApplicationName,用于包含应用程序范围的配置变量和所有帮助器方法C# 如何:从(静态)方法返回对象?,c#,winforms,oop,C#,Winforms,Oop,我正在为作业调度器使用C2.0构建一个WinForms应用程序 在Program.cs中编写了定义作业对象的公共类作业 还在Program.cs中编写了一个公共静态类ApplicationName,用于包含应用程序范围的配置变量和所有帮助器方法 //Static Class for Global Properties and Global Methods //***************************************************** public static
//Static Class for Global Properties and Global Methods
//*****************************************************
public static class ApplicationName
{
//Global Properties
//***************************
public static string ConfigFilePath = "D:\\ApplicationName\\conf\\ApplicationName.ini";
public static string DBFilePath = "D:\\ApplicationName\\data\\ApplicationName.xml";
//Global Methods
//************************
public static void HelperMethod1(Args)
{
}
public static string HelperMethod2(Args)
{
}
public static Job GetJobByID(int JobID)
{
XmlDocument XMLDB = new XmlDocument(); XMLDB.Load(DBFilePath);
Job ObjJob = new Job();
ObjJob.JobName = XMLDB.SelectSingleNode("/ApplicationName/Job[JobID=" + JobID.ToString() + "]/JobName").InnerText.Trim();
//Several other properties are retrieved from the DB and set to the object here.
return ObjJob;
}
}
创建/实例化作业对象并返回该对象需要公共静态类ApplicationName中的一个助手方法GetJobByID。我相信这是可能的,ClassA中的一个方法创建并返回ClassB的实例/对象
注:此方法用于通过以下方式从其他表单(如Form1.cs、Form2.cs等)访问。据我所知,这也是允许的,也是公认的做法
private void FormAddEditJob_Load(object sender, EventArgs e)
{
int SelectedJobID = Convert.ToInt32(this.Tag);
//Creating an instance of the Job Class
//Assigning the value of the Job object returned by GetJobByID method
Job JobToEdit = ApplicationName.GetJobByID(SelectedJobID);
TextBoxJobID.Text = SelectedJobID.ToString();
TextBoxJobName.Text = JobToEdit.JobName;
}
问题:GetJobByID方法返回的对象未存储在对象引用JobToEdit中。甚至可能是GetJobByID方法没有正确/按预期返回对象。我做错了什么?这不是返回对象的正确方法吗 发现并解决了问题
GetJobByID方法中的语句ObjJob.PropertyName=XMLDB.SelectSingleNode之一由于从DB获取null值而引发异常,从而导致ObjJob对象返回为null。通过逐行调试发现此错误 您的代码没有本质上的错误,只是不需要初始化JobToEdit,您只需执行以下操作:Job JobToEdit=MedimuneBjm.GetJobById Selected JobId;什么是MedimuneBJM?你不应该用ApplicationName.GetJobByIDSelectedJobID来调用它吗?@DionV.:是的,很抱歉输入错误。我已经编辑了静态类名。对象没有存储在JobToEdit中是什么意思?它是空的吗?当您在GetJobById中返回旧作业时,您是否检查过它是否包含您期望的内容?哦,好的,它是空的。在调试器中检查静态方法是否返回正确的对象实例。
private void FormAddEditJob_Load(object sender, EventArgs e)
{
int SelectedJobID = Convert.ToInt32(this.Tag);
//Creating an instance of the Job Class
//Assigning the value of the Job object returned by GetJobByID method
Job JobToEdit = ApplicationName.GetJobByID(SelectedJobID);
TextBoxJobID.Text = SelectedJobID.ToString();
TextBoxJobName.Text = JobToEdit.JobName;
}