C# 如何:从(静态)方法返回对象?

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

我正在为作业调度器使用C2.0构建一个WinForms应用程序

在Program.cs中编写了定义作业对象的公共类作业

还在Program.cs中编写了一个公共静态类ApplicationName,用于包含应用程序范围的配置变量和所有帮助器方法

//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; 
}