web-dev-qa-db-ja.com

静的メソッドから非静的メソッドを呼び出す方法はありますか?

これが私が持っているものです。

public static void Person_home_phone_TextChanged(object sender, EventArgs e) { ... }

この静的メソッド内から同じクラスまたは別のクラスから非静的メソッドにアクセスする方法はありますか?

Person_home_phoneテキストボックスのテキストを取得して、クラスデータメンバーに保存する必要があります。

5
Glimpse

Example()->例

typeのインスタンスを作成してから、staticメソッドからnon-staticを呼び出す必要があります。

public class Example(){

    public static void StaticExample()
    {

        Example example = new Example();
        example.NonStatic();
    }

    public void NonStatic()
    {

    }

}
17
Gabe

非静的メソッドを呼び出すには、クラスのインスタンスが必要です。

8

解決策1:メソッドが呼び出されるたびにCarの新しいインスタンスをインスタンス化します。

 public static void DoSomething()
        {
            Car c = new Car();
            c.NonStaticMethod();
        }

解決策#2:車をメソッドに渡します。

 public static void DoSomething(Car c)
        {
            c.NonStaticMethod();
        }

解決策#3:

シングルトンカーを使用して、静的メソッドをサポートします。 (複数のスレッドからの呼び出しが可能である場合は、ロックも必要になる場合があります。System.Windows.Forms.Timerはスレッドを導入しないことに注意してください。)

 public class Car
    {
        private static Car m_Singleton = new Car();

        public static void DoSomething()
        {
            m_Singleton.NonStaticMethod();
        } 

タイマーのメモリの問題については説明していないことに注意してください。その根本的な問題に対する解決策がある可能性は非常に高いです。

2
Kiran.Bakwad

そのメソッドにアクセスするためのオブジェクトが必要です。

静力学はオブジェクトに属していません。それらはクラス宣言に属しています。

0
deepmax

インスタンスメソッド(vel。non-static)は、そのクラスのインスタンスのコンテキストでのみ呼び出すことができます。したがって、それを呼び出すことはできますが、静的メソッドのどこかでそのクラスのオブジェクトを使用できるようにする必要があります。

0
MarcinJuraszek

非静的メソッドには、クラスのインスタンスが必要です。インスタンスを渡すか、メソッドでインスタンスを作成しない限り、非静的メソッドを呼び出すことはできません。そのメソッドが操作するクラスのインスタンスがわからないためです。

非静的メソッドを呼び出すには、クラスクラスのインスタンスが必要です。

0
duDE