如何从其他类的静态方法调用非静态方法?

Kee*_*eek 1 .net c# oop static

我想从位于不同类中的静态方法调用非静态方法.我知道我想从中调用该方法的类的实例,但我无法访问它.

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        Helper _Helper = new Helper(this);
    }
    public void DoSmth(string input)
    {
        Console.WriteLine(input);
    }
}

public class Helper
{
    MainForm _mainform = null;

    public Helper(MainForm mainform)
    {
        _mainform = mainform;
        _mainform.DoSmth("test"); //ok
    }
    public static void Test ()
    {
        _mainform.DoSmth("test"); //generates error
    }
}
Run Code Online (Sandbox Code Playgroud)

Ham*_*jam 5

您无法在静态上下文中访问非静态上下文.

你可以做_mainform静电

static MainForm _mainform = null;
Run Code Online (Sandbox Code Playgroud)

或者将要测试的实例传递给Test方法

public static void Test(MainForm mainForm)
{
    mainForm.DoSmth("test"); 
}
Run Code Online (Sandbox Code Playgroud)

或使Test非静态

public void Test()
{
    _mainform.DoSmth("test"); 
}
Run Code Online (Sandbox Code Playgroud)

除此之外,你应该修改你的设计.想想这些问题.如果我有静态方法,为什么它应该访问实例成员?如果一个方法应该访问实例成员那么为什么它应该是静态的?