2016-10-20 9 views
1

別のクラスにある静的メソッドから非静的メソッドを呼びたいと思います。メソッドの呼び出し元のクラスのインスタンスがわかりますが、アクセスできません。別のクラスの静的メソッドから非静的メソッドを呼び出すにはどうすればよいですか?

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 
    } 
} 
+4

静的メソッドは、パラメータとして渡されたフォームを必要とするか、静的メソッド内に新しいインスタンスを構築する必要があります。 – asawyer

+0

@asawyerまたは 'Helper.Test'を非静的にしてください。 –

+0

@DStanleyはい、それは実際に尋ねられたものではありませんが、それも動作すると思います。 Helper型staticの内部にある 'MainForm'インスタンスを、今考えてみることもできます。 – asawyer

答えて

5

静的コンテキスト内で非静的コンテキストにアクセスすることはできません。

あなたは_mainform静的

static MainForm _mainform = null; 

を作るか、またはあなたがTest方法

public static void Test(MainForm mainForm) 
{ 
    mainForm.DoSmth("test"); 
} 

にテストするか、すべてはさておきTest非静的

public void Test() 
{ 
    _mainform.DoSmth("test"); 
} 

をあなたがすべき作りたいインスタンスを渡すことができますデザインを改訂してください。これらの質問を考えてみましょう。静的メソッドがある場合、なぜインスタンスメンバーにアクセスする必要がありますか?メソッドがインスタンスメンバーにアクセスする必要がある場合、なぜそれが静的であるべきですか?

関連する問題