【问题标题】:Call a non-static class with a console application使用控制台应用程序调用非静态类
【发布时间】:2014-06-12 09:07:04
【问题描述】:

我正在尝试使用控制台应用程序从另一个类调用方法。我尝试调用的类不是静态的。

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        var myString = p.NonStaticMethod();
    }

    public string NonStaticMethod()
    {
        return MyNewClass.MyStringMethod(); //Cannot call non static method
    }
}

class MyNewClass
{
    public string MyStringMethod()
    {
        return "method called";
    }
}

我得到错误:

无法在静态上下文中访问非静态方法“MyStringMethod”。

如果我将 MyStringMethod 移动到类程序中,这将有效。 我怎么能成功地做到这一点? 我无法将类设为静态,也无法将方法设为静态。

【问题讨论】:

    标签: c# static console-application


    【解决方案1】:

    就像你创建一个 Program 类的实例来调用 NonStaticMethod,你必须创建一个 MyNewClass 的实例:

    public string NonStaticMethod()
    {
        var instance = new MyNewClass();
        return instance.MyStringMethod(); //Can call non static method
    }
    

    【讨论】:

      【解决方案2】:

      非静态类需要一个实例来访问其成员。

      在静态Main方法中创建实例并调用非静态类成员:

      static void Main(string[] args)
      {
          MyNewClass p = new MyNewClass();
          var myString = p.MyStringMethod();
      }
      

      【讨论】:

        【解决方案3】:

        如果你想调用一个非静态类的成员函数,那么你必须创建它的实例,然后调用它需要的函数。

        因此,要调用非静态类 MyNewClass 的 MyStringMethod(),请执行以下操作:

        class Program
        {
            static void Main(string[] args)
            {
                Program p = new Program();
                var myString = p.NonStaticMethod();
            }
        
            public string NonStaticMethod()
            {   
                MyNewClass obj = new MyNewClass();
                if(obj != null)
                    return obj.MyStringMethod();
                else
                    return "";
            }
        }
        
        class MyNewClass
        {
            public string MyStringMethod()
            {
                return "method called";
            }
        }
        

        【讨论】:

          【解决方案4】:

          非静态方法需要一个实例。您应该像创建程序以调用其非静态方法一样创建它。

          【讨论】:

            【解决方案5】:

            你需要创建MyNewClass的Instance

            class Program
            {
                //instantiate MyNewClass
                var myNewClass = new MyNewClass();
            
                static void Main(string[] args)
                {
                    Program p = new Program();
                    var myString = p.NonStaticMethod();
                }
            
                public string NonStaticMethod()
                {
                    //use the instance of MyNewClass
                    return myNewClass.MyStringMethod(); //Cannot call non static method
                }
            }
            
            class MyNewClass
            {
                public string MyStringMethod()
                {
                    return "method called";
                }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-12-13
              • 1970-01-01
              • 2017-01-15
              • 1970-01-01
              • 2016-06-30
              • 2019-07-07
              • 2012-04-09
              相关资源
              最近更新 更多