有没有办法从静态方法调用非静态方法?

时间:2013-04-09 14:51:53

标签: c# visual-studio-2012 static-methods non-static

这就是我所拥有的。

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

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

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

6 个答案:

答案 0 :(得分:18)

示例() - >实施例

您只需要创建type的实例,然后从non-static方法调用static

public class Example(){

    public static void StaticExample()
    {

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

    public void NonStatic()
    {

    }

}

答案 1 :(得分:8)

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

答案 2 :(得分:2)

解决方案#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();
        } 

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

答案 3 :(得分:0)

你应该有一个对象来访问它的方法。

静态不属于对象。它们属于类声明。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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