我在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;
}
}
}
}
答案 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)
你的方法不是静态的,但是你试图像这样调用它们。