暴露我的类方法

时间:2013-09-18 21:26:30

标签: c# wpf

我在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 个答案:

答案 0 :(得分:4)

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

将方法定义更改为;

public static int WageStart(string Location)

并称之为;

int DaysAdjStart = DateCalcs.WageStart(Location);    

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

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

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

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

答案 1 :(得分:0)

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

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

  int DaysAdjStart = dc. 

}

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

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

答案 2 :(得分:0)

如果你不使方法静态,你必须实例化整个类。所以尝试像

这样的东西
public static int WageStart(string Location)

答案 3 :(得分:-2)

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