C#consoleApp无法在单独的类中调用静态方法

时间:2017-06-23 20:31:11

标签: c# .net class methods constructor

我在过去的几个小时里一直在努力创造这个功能,并希望掌握课程的使用。我已经大力搜索了答案,但大多数答案似乎都不适用于我的情况。

我创建了一个类public class Car以及一个构造函数&方法  static void ReadData()

现在我的目标是引入Car的新实例并调用它,以便控制台将其读出。主要问题是在public void main下,它拒绝识别我的ReadData()方法。

这是我的代码:

namespace ConsoleApp13
{
class Program
{

    public void Main(string[] args)
    {

        Car crossOver = new Car("BMW", "X4", 2015, "6/23/17");

        ReadData(crossOver);  // debugger says that ReadData does not exist 
       {
       Console.ReadLine();
       }
    }

}

public class Car
{
    private string make;
    private string model;
    private int year;
    private string whenSold;

    public Car(string mk, string mdl, int yr, string sld)
    {
        make = mk;
        model = mdl;
        year = yr;
        whenSold = sld;
    }
    static void ReadData(Car Car)
    {
        Console.WriteLine("Make: " + Car.make);
        Console.WriteLine("Model: " + Car.model);
        Console.WriteLine("Year: " + Car.year);
        Console.WriteLine("Sold at: " + Car.whenSold);
    }
   }
  }

我已经尝试了几种不同的方法在范围之前放置静态但它总是以某种错误结束,或者控制台应用程序在没有读取字符串的情况下立即退出

3 个答案:

答案 0 :(得分:3)

static void ReadData(Car Car)

您没有添加access modifier。默认值为private。这意味着您无法在课堂外访问它。您必须告诉编译器其他代码可以调用此方法。

public static void ReadData(Car Car)

此外,要调用在Type上定义的静态方法,您必须使用Type的名称来调用它。

Car.ReadData(someCar);

当你掌握了这一点时,你可以通过使用C#6的新功能,static usings

来实现这一目标。
using static Car; // imports all static methods into the current context
{
    public void Main()
    {
        ReadData(new Car("lol"));
    }
}

答案 1 :(得分:1)

您在代码中缺少Car以及@Will指出的访问修饰符。应该是

Car.ReadData(crossOver);

或进行更多更改您只能将公开而不是静态删除Car参数 adn,然后使用this.而不是引用Car参数,然后像这样调用代码

Car crossOver = new Car("BMW", "X4", 2015, "6/23/17");
crossOver.ReadData();

答案 2 :(得分:0)

由于ReadData静态函数是Car类的一部分,因此必须将函数调用为:

Car.ReadData(crossover);

Main无法识别ReadData的原因是因为它正在Program类中查找它的定义。

您的整个代码:

namespace ConsoleApp13
{
    class Program
    {
        static void Main(string[] args)
        {

            Car crossOver = new Car("BMW", "X4", 2015, "6/23/17");
            Car.ReadData(crossOver);
            Console.ReadLine();
        }
    }

    public class Car
    {
        private string make;
        private string model;
        private int year;
        private string whenSold;

        public Car(string mk, string mdl, int yr, string sld)
        {
            make = mk;
            model = mdl;
            year = yr;
            whenSold = sld;
        }
        public static void ReadData(Car Car)
        {
            Console.WriteLine("Make: " + Car.make);
            Console.WriteLine("Model: " + Car.model);
            Console.WriteLine("Year: " + Car.year);
            Console.WriteLine("Sold at: " + Car.whenSold);
        }
    }
}