6

这就是我所拥有的。

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

有没有办法从这个静态方法内部访问同一个或另一个类的非静态方法?

我需要获取 Person_home_phone 文本框中的文本并将其保存到类数据成员中。

4

5 回答 5

27

示例()-> 示例

您只需要从方法创建typethen 调用, 的实例。non-staticstatic

public class Example(){

    public static void StaticExample()
    {

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

    public void NonStatic()
    {

    }

}
于 2013-04-09T14:53:37.797 回答
9

您需要有一个类的实例才能调用非静态方法。

于 2013-04-09T14:53:19.803 回答
2

解决方案#1:每次调用该方法时都实例化一个新的 Car 实例。

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

解决方案#2:将 Car 传递给方法。

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

解决方案#3:

使用单例 Car 来支持静态方法。(如果有可能从多个线程调用,您可能还需要锁定。请注意 System.Windows.Forms.Timer 不会引入线程。)

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

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

请注意,您尚未解释 Timer 的内存问题。很有可能有解决这个潜在问题的方法。

于 2015-05-13T09:11:52.147 回答
1

实例方法(vel. non-static)只能在该类的实例的上下文中调用。所以你可以调用它,但你必须在你的静态方法的某个地方有一个该类的对象。

于 2013-04-09T14:53:55.687 回答
1

非静态方法需要类的实例。除非你传入了一个实例,或者在你的方法中创建了一个实例,否则你不能调用非静态方法,因为你不知道该方法应该操作的类的哪个实例。

您需要类的实例来调用非静态方法。

于 2013-04-09T14:54:13.177 回答