【问题标题】:Unable to call a method from another class无法从另一个类调用方法
【发布时间】:2012-04-30 05:19:27
【问题描述】:

我有一个程序,用户在其中输入用户名和日期,然后单击将数据输入数据库的按钮。

我遇到的问题是我似乎无法将文本框日期数据作为方法中的参数传递给我的 BOL 类。我收到以下错误:“无法使用实例引用访问成员 'P90XPRogramt.ProgramLoginBOL.TestParsing(string)';改为使用类型名称对其进行限定”

这是我的 UI 层的代码:

public partial class ProgramLoginForm : Form
{
    private ProgramLoginBOL busObject =
        new ProgramLoginBOL();       

    //default constructor
    public ProgramLoginForm(string dayNo)
    {
        InitializeComponent();
        busObject.InitializeConnection();
    } 

    private void btnBeginProgram_Click(object sender, EventArgs e)
    {
        busObject.UserName = txtEnterName.Text;            

        busObject.TestParsing(txtStartDate.Text);            

    }

    //event handler to close program
    private void btnExitProgram_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }        
}

这是我的 BOL 类的代码:

class ProgramLoginBOL
{
    //declare variables
    string userName = "";

    //instantiate a connecttion object to Access database
    OleDbConnection aConnection =
        new OleDbConnection(
            "Provider=Microsoft.ACE.OLEDB.12.0;" +
            "Data Source=P90XDatabase.accdb;");

    public ProgramLoginBOL()
    {
    }

    //property for userName variable
    public string UserName
    {
        get { return userName; }
        set { userName = value; }
    }

    public static DateTime TestParsing(string datetext)
    {
        DateTime dt;

        if (DateTime.TryParseExact(datetext, "d", null, 0, out dt))
        {
            Console.WriteLine("Parsed to {0}", dt);
        }
        else
        {
            Console.WriteLine("Bad date");
        }
        return dt;
    }

    public void InitializeConnection()
    {
        ProgramLoginDAL.InitializeConnection(aConnection);
    }
}

我不确定它要我做什么。按类型名称,我假设它们的意思是数据类型,所以我尝试了以下方法:

string busObject.TestParsing(txtStartDate.Text);

string.busObject.TestParsing(txtStartDate.Text);

string.TestParsing(txtStartDate.Text);

busObject.TestParsing(string txtStartDate.Text);

这些都没有奏效。我也尝试使用 DateTime 而不是字符串。正如我所说,我不知道它要我做什么。

【问题讨论】:

    标签: c# datetime methods argument-passing


    【解决方案1】:

    你可以用类名而不是类对象来调用静态方法 所以试试

    ProgramLoginBOL.TestParsing(txtStartDate.Text);
    

    【讨论】:

      【解决方案2】:

      您的方法是静态的,您不能使用该类的实例来调用它。这样做

      ProgramLoginBOL.TestParsing("text to pass");
      

      【讨论】:

        【解决方案3】:

        它希望你改变:

        busObject.TestParsing(txtStartDate.Text);
        

        到:

        ProgramLoginBOL.TestParsing(txtStartDate.Text);
        

        由于TestParsingProgramLoginBOL 类的静态方法,并且与特定实例无关。

        【讨论】:

        • 感谢您的帮助。我会做出适当的改变
        【解决方案4】:

        您尝试调用的方法是static-方法,而不是实例方法。

        应该在 class ProgramLoginBOL 而不是具体实例上调用 TestParsing 方法,如下所示:

        ProgramLoginBOL.TestParsing(txtStartDate.Text);
        

        当不需要实例的特定属性时使用静态方法。

        【讨论】:

        • 感谢您的帮助。我会做出适当的改变
        【解决方案5】:

        不能完全按照错误消息的说明使用类的实例调用静态方法。

        P90XPRogramt.ProgramLoginBOL.TestParsing(txtStartDate.Text);
        

        对于未来的错误,请先尝试搜索错误代码 - 通常 MSDN 文章包含解释和示例,如本例中的 CS0176

        【讨论】:

        • 我不知道 MSDN 有错误代码解释。我将来会这样做。感谢您的帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 2020-05-27
        相关资源
        最近更新 更多