静态类中的函数需要调用类的名称

本文关键字:调用 函数 静态类 | 更新日期: 2023-09-27 18:17:41

我在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");
        }
    }
}

将"listBox1."DataSource = returnCategoryNames();"产生代码中所示的错误,为了修复它,我必须将其调整为"listBox1 "。DataSource = MyFillerClass.returnCategoryNames();".

问题是:在一个可以添加大量类型的长程序中,我可以调整类MyFillerClass,这样我就可以像这样调用函数:returnCategoryNames() ?

静态类中的函数需要调用类的名称

不,在5.0之前的c#中不允许。您需要在静态方法名前面加上类名。

然而,在c# 6.0中,将会有静态的using语句可用。这个新的语言特性将允许您直接访问静态类方法。

你还不能用c#来做。要做到这一点,你需要做一个非静态类和非静态方法。

你可以做一个扩展方法

要从一个类中调用一个函数,你需要为这个类创建一个对象,然后只有你才能调用这个类中定义的方法。

在静态类的情况下,不需要创建任何对象。你必须直接调用方法,后跟类名。

在你的情况下MyFillerClass.returnCategoryNames ();