c#来自另一个班级

时间:2017-08-15 16:32:06

标签: c# listview partial-classes

我正在制作c#app,我需要从另一个类访问部分类中的方法。

更具体地说,我想从类中添加项目到listview,这些类与部分类不同但在同一名称空间中。

我试过这样:

    public partial class Aa : Form
{
    public static void UpdateListView(string[] array)
    {
        if (ProcessNetUsageList.InvokeRequired)
        {
            ProcessNetUsageList.Invoke(new Action<string[]>(UpdateListView), array);
        }
        else
        {
            ListViewItem item = new ListViewItem(array[0]);
            for (int i = 1; i < 4; i++)
                item.SubItems.Add(array[i]);
            ProcessNetUsageList.Items.Add(item);
        }
    }
}

然后从另一个类访问它,如:

class Test
{
    test()
    {
        ProgramName.Aa.UpdateListView(someArray);
    }
}

但它给出了一个错误,因为静态方法只能访问静态变量,而我的listview不是静态的(我在vs designer中创建了listview)。

如果我从部分类中的方法中删除static关键字然后我无法访问它。我试图创建部分类的实例但没有成功。欢迎任何想法

注意:我在我的UpdateListView方法中使用Invoke因为稍后将在新线程上运行

2 个答案:

答案 0 :(得分:0)

从UpdateListView中删除static关键字,就像之前一样。在test()中,您需要在访问UpdateListView之前实例化Aa。

Aa temp = new Aa()

然后,您可以使用

访问该方法
temp.UpdateListView(someArray);

答案 1 :(得分:0)

面向对象语言的本质是对象没有修改其他对象的通用访问权限。这是好事

你提供的代码相对较少,因此很难在这里提供完美的答案,但有一些范例可以解决这个问题。

一种是将实例传递给您的测试类,如下所示:

class Test
{
    test(ProgramName.Aa form)
    {
        form.UpdateListView(someArray);
    }
}

或者,如果课程test实际上包含ListView,您可以将其传递给Aa中的静态方法。

class Test
{
    ListView someListView;
    test()
    {
        ProgramName.Aa.UpdateListView(someListView, someArray);
    }
}

最终,您应该考虑这些对象之间的逻辑关系,以确定这些对象应该如何通信。