1

我正在用 wpf c# 制作一个简单的应用程序。我是对象编程的新手,上过几门课程,但努力做到最好。我希望这是一个非常新手的错误,所以我提前道歉!

我会用文字解释,然后显示我的代码。

我需要计算从今天到工资开始日的天数(我们总是在同一天开始工资,例如星期六),然后我将使用计算中的天数来计算工资开始日期。

为此,我尝试使用方法编写一个类。我的期望是我应该能够从 MainWindow.xaml.cs MainWindow 调用此方法。我期待以Class.Method格式调用该方法。但是,在 MainWindow 类中,当我输入我的类名时,intellisense 并没有将我的方法作为一个选项,我期待它。

我希望我没有正确定义类或方法,无论如何这里是代码:

调用事件处理程序

     private void cBChSite_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {
        string Location = cBChSite.SelectedItem.ToString();
        //Below is the call the the method DateCalcs.WageStart(Location); Which intellisense does not show
        int DaysAdjStart=DateCalcs.
    }

DateCalcs 类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Test_Read_CSV
    {
    public class  DateCalcs
    {
    DateCalcs()
    {
        //Constructor

    }

    public int WageStart(string Location)
    {
        //Returns the days difference from current to expect wage start 
        int DaysToStart;
        string CHCLocation = Location;
        DayOfWeek WageStartDay = WageWeekStart(Location);
        DayOfWeek Today = DateTime.Today.DayOfWeek;

        DaysToStart = WageStartDay - Today;

        // just to display result

       System.Windows.MessageBox.Show(DaysToStart.ToString(), "Information");
       return DaysToStart;


    }

    private DayOfWeek WageWeekStart(string Location)
    { 
        //Begin Switch
        switch (Location)
        {
            case "Leicester":
                {
                    return DayOfWeek.Wednesday;
                }
            default:
                return DayOfWeek.Saturday;
        }
    }
}
}
4

4 回答 4

4

该方法要么必须声明为,static要么您需要该类的实例。static方法是归属于类本身的方法。非静态方法通常被称为“实例方法”,这意味着实例本身拥有该方法,并且您必须拥有一个实例才能调用它。所以你可以;

将方法定义更改为;

public static int WageStart(string Location)

并称之为;

int DaysAdjStart = DateCalcs.WageStart(Location);    

new或使用关键字 like实例化该类;

 DateCalcs dc = new DateCalcs();
 int DaysAdjStart = dc.WageStart(Location);

基本问题是您试图调用实例方法,就像它是静态方法一样。您如何解决它更多的是设计考虑,对于您的目的可能并不重要。如果这是一项家庭作业,那么您问题中的语言听起来像是您想要一个静态方法。

一般来说,实用程序方法应该是静态方法。对实例数据进行操作的方法必须是实例方法。如果该方法不关心任何特定于实例的数据,那么它就是 be 的候选者static

于 2013-09-18T21:34:35.453 回答
0

在调用事件处理程序中执行以下操作:

{
  string Location = cBChSite.SelectedItem.ToString();
  DateCalcs dc = new DateCalcs();

  int DaysAdjStart = dc. 

}

Intellisense 现在将向您展示可用的方法。

为了在类上使用方法,您需要将该类实例化为一个对象,或者方法/类需要声明为静态。在您的情况下,最好的办法可能是简单地实例化它。

于 2013-09-18T21:31:05.103 回答
0

如果您不使方法静态,则必须实例化整个类。所以尝试类似的东西

public static int WageStart(string Location)
于 2013-09-18T21:31:34.437 回答
-2

您的方法不是静态的,但您正试图这样调用它们。

于 2013-09-18T21:30:57.753 回答