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

C# 有没有办法从静态方法调用非静态方法?,c#,visual-studio-2012,static-methods,non-static,C#,Visual Studio 2012,Static Methods,Non Static,这是我的 public static void Person_home_phone_TextChanged(object sender, EventArgs e) { ... } 有没有办法从这个静态方法内部访问同一个类或另一个类中的非静态方法 我需要抓取Person\u home\u phone文本框中的文本并将其保存到类数据成员。您需要类的实例来调用非静态方法。示例() 您只需要创建类型的实例,然后从静态方法调用非静态 public class Example(){ public

这是我的

public static void Person_home_phone_TextChanged(object sender, EventArgs e) { ... }
有没有办法从这个静态方法内部访问同一个类或另一个类中的非静态方法


我需要抓取Person\u home\u phone文本框中的文本并将其保存到类数据成员。

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

示例()

您只需要创建
类型的实例
,然后从
静态
方法调用
非静态

public class Example(){

    public static void StaticExample()
    {

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

    public void NonStatic()
    {

    }

}

实例方法(vel.non-static)只能在该类实例的上下文中调用。因此,您可以调用它,但必须在静态方法中的某个位置提供该类的对象。

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

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

解决方案#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不引入线程。)


请注意,您尚未解释计时器的内存问题。很可能有一个解决方案可以解决这个潜在问题。

当然,您可以从静态方法内部调用非静态方法。为什么你认为你不能?Main是一个静态方法,因此显然您必须能够从静态方法调用非静态方法。可能的重复:只需将省略号
替换为
sender.ToString()。由于
ToString
是一种非静态方法,您已经成功地“访问”了一个!您的静态方法看起来像文本框上的事件处理程序,可能不需要首先是静态的place@JeppeStigNielsen那么发送者包含文本框。文本?谢谢这就是我要找的。如果该类来自System.Web.UI.Page类型,该怎么办?还是System.Web.UI.UserControl?我们能得到它的一个实例吗?假设被调用的方法属于一个表单类,这意味着每次调用该方法时,我必须实例化一个新的表单实例?
 public class Car
    {
        private static Car m_Singleton = new Car();

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