C# 我能';似乎不能将类中的一个方法调用到另一个类中。我的主类和ApplicationUtilities类有错误。我做错了什么?

C# 我能';似乎不能将类中的一个方法调用到另一个类中。我的主类和ApplicationUtilities类有错误。我做错了什么?,c#,C#,我似乎无法将类中的方法调用到另一个类中。我的主类“DisplayApplicationInformation”、“DisplayDivider”和“TerminateApplications”以及ApplicationUtilities类都有错误。我做错了什么?以下是我所拥有的: class ApplicationUtilities { public static void DisplayAplicationInformation() { Console.Writ

我似乎无法将类中的方法调用到另一个类中。我的主类“DisplayApplicationInformation”、“DisplayDivider”和“TerminateApplications”以及ApplicationUtilities类都有错误。我做错了什么?以下是我所拥有的:

class ApplicationUtilities
{
    public static void DisplayAplicationInformation()
    {
        Console.WriteLine();
        Console.WriteLine("Welcome to the Basic User Interface program");
        Console.WriteLine("CIS247A, Week 1 Lab");
        Console.WriteLine("Name: Lewis Jones");
        Console.WriteLine("This program accepts user input as a string, then make the appropriate data conversion");
        Console.WriteLine();
    }
}


public static void DisplayDivider(string outPutTitle)
{
    Console.WriteLine();
    Console.WriteLine("***************", + outPutTitle + "***************");
    Console.WriteLine();
}

public static void TerminateApplication()
{
    Console.WriteLine("Thank you for using the Basic User Interface Program!!");

}
}


}

您正在使用
AU
IU
,而没有对它们进行初始化。此外,您尝试将静态方法作为非静态方法访问

//initialize AU and IU
ApplicationUtilities AU = new ApplicationUtilities();
InputUtilities IU = new InputUtilities ();
从所有方法中删除
静态
,然后通过

//call DisplayApplicationInformation()
AU.DisplayApplicationInformation();
说明:

Main()
static
,因此有两个选项可以从类中调用方法:

  • 将类中的方法定义为
    static
  • 类的创建实例包含这些方法

您混合使用了这两种方法,这是一种糟糕的方式。

如果这不仅仅是复制/粘贴错误:DisplayDivider和TerminateApplication不在ApplicationUtility类范围内。 删除displayapplicationinformation()之后的第二个}应该可以解决这个问题

在main方法中,您试图用一个类实例调用静态方法:ApplicationUtilities AU。静态方法不需要这样做-因此您应该删除static关键字或直接调用它们:

ApplicationUtilities.DisplayApplicationInformation();

另外,方法DisplayApplicationInformation在您的类中有一个输入错误:DisplayApplicationInformation(缺少一个“p”)

静态方法是属于
类而不是
实例的算法

记住这一点,此代码将失败:

ApplicationUtilities AU - new ApplicationUtilities();
AU.DisplayDivider("Name");
它失败的原因是因为
AU
是类的
实例,而不是
类本身。要正确运行上述代码,请通过类本身调用该方法:

ApplicationUtilities.DisplayDivider("Name");
正如在其他答案中指出的,如果不实例化对象,就不能从实例调用非静态方法。你在这里做了什么:

ApplicationUtilities AU;
InputUtilities IU;
就是简单地声明变量。让我们假设
DisplayDivider()
是一个非静态方法。结果:

ApplicationUtilities AU;
AU.DisplayDivider("Name");

NullReferenceException
,因为在您提供的方法
DisplayDivider
TerminateApplication
不在
ApplicationUtilities
类的代码中,对象的默认值是
null

同时尝试在
ApplicationUtilities
类定义中添加
public
关键字:
public类ApplicationUtilities


默认情况下,在C#中,类是内部的,如果您的
ApplicationUtilities
类是在另一个项目中定义的,您将无法调用他的方法。

什么是错误文本?我不完全理解。我被告知要使用“publicstaticvoid”,但我仍然会出错。我应该不使用AU和IU吗?@mrlljones我在答案中添加了解释。您可以在实例上调用静态方法。只是不能用vica versa。@Balázs来澄清我的意思:可以在实例方法内部调用静态方法,但不能用类实例调用静态方法。因此,在给定的代码中,ApplicationUtilities.DisplayApplicationInformation();可以工作,但是AU.DisplayApplicationInformation();我真的很感激你们的帮助。还有一件事;在主类中,我的代码中也有一个错误。我试着用几种不同的方法重写它,但每种方法都是错误的。ApplicationUtilities.DisplayDivider(“名称”);-->name=IU.GetInput(“输入您的姓名”);Console.WriteLine(“您的名字是:”+name);没有关系。很抱歉。我发现了那个错误。我的程序现在运行得很好。再次感谢你的帮助。
ApplicationUtilities AU;
AU.DisplayDivider("Name");