我在文件MyFillerClass.cs中有一个名为MyFillerClass的类,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace trial
{
public static class MyFillerClass
{
public static List<string> returnCategoryNames()
{
List<string> catNames = new List<string>();
catNames.Add("one");
catNames.Add("two");
catNames.Add("three");
catNames.Add("Others");
return catNames;
}
}
}
现在,当我想从其他地方(如表单类)调用它时:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace trial
{
public partial class Form1 : Form
{
static string lastSelectedCategory;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
listBox1.DataSource = returnCategoryNames(); //error : The name 'returnCategoryNames' does not exist in the current context
lastSelectedCategory = listBox1.SelectedValue.ToString();
}
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
lastSelectedCategory = listBox1.SelectedValue.ToString();
System.Diagnostics.Debug.Print("### User choosed " + lastSelectedCategory + " category");
}
}
}
行&#34; listBox1.DataSource = returnCategoryNames();&#34;产生一个错误,如代码中所示,要修复它我必须将其调整为&#34; listBox1.DataSource = MyFillerClass.returnCategoryNames();&#34;。
问题是:在一个可以添加大量输入的长程序中,我可以调整类MyFillerClass,以便我可以像这样调用函数:returnCategoryNames()?
答案 0 :(得分:4)
不,不是在C#中达到5.0。您需要在static method name with the class name前加上前缀。
然而,在C# 6.0 there will be static using statements available。这种新的语言功能允许您直接访问静态类方法。
答案 1 :(得分:2)
哟不能在C#中做到这一点。为此,您需要执行无静态类和无静态方法。
你可以extension method。
答案 2 :(得分:0)
要从类中调用函数,您需要为该类创建一个对象,然后只能调用该类中定义的方法。
如果是静态类,则无需创建任何对象。你必须直接调用方法后跟类名。
在你的情况下 MyFillerClass.returnCategoryNames();