Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中调用方法?_C# - Fatal编程技术网

如何在C#中调用方法?

如何在C#中调用方法?,c#,C#,我试图学习C#中的方法是如何工作的(也使用XNA框架) 这是我做的方法 public void Exit() { if (Keyboard.GetState().IsKeyDown(Keys.Escape)) { this.Exit(); } 我的印象是它的格式是正确的。但我不知道该怎么称呼它。或者我做错了?对于这种特殊的方法,您可以这样称呼它: Exit(); Foo.Bar(); // Foo i

我试图学习C#中的方法是如何工作的(也使用XNA框架)

这是我做的方法

     public void Exit()
    {
        if (Keyboard.GetState().IsKeyDown(Keys.Escape))
        {
            this.Exit();
        }

我的印象是它的格式是正确的。但我不知道该怎么称呼它。或者我做错了?

对于这种特殊的方法,您可以这样称呼它:

Exit();
Foo.Bar();  // Foo is the name of class, not an object of type Foo
把它作为一条线插入任何地方,它就会起作用。在执行此操作之前,请检查
this.Exit()行,您不想递归地调用自己

但是看一下该方法中的其他代码行,我不确定这正是您想要做的-当按下特定的键并同时按下
Esc
键时,是否要退出?

有两件事很突出:

  • 最后缺少一个
    }
  • this.Exit()
    是一个递归调用
  • 方法总是在对象(如类)上声明,并且
    this
    引用当前对象,因此
    this.Exit()
    将在按住Esc键的同时连续调用自身


    您试图用代码实现的是什么?

    我想您必须从某个地方开始。。。您似乎在不知不觉中编写了一个递归inifinte循环

    public void Exit()
    {
        if (Keyboard.GetState().IsKeyDown(Keys.Escape))
        {
            this.Exit(); // this is calling your own Exit() method we we are  in at the moment!
        }
    }
    
    我想你想要的是:

    public void Exit()
    {
        if (Keyboard.GetState().IsKeyDown(Keys.Escape))
        {
            Environment.Exit();
        }
    }
    

    方法是类(或结构)的成员,通过类的实例调用。例如:

    public class Foo {
        public void Bar() 
        {
            Console.WriteLine("Running the Bar method");
        }
    }
    
    public class Foo {
        public static void Bar() 
        {
            Console.WriteLine("Running the static Bar method");
        }
    }
    
    然后,您将在某个地方生成如下代码:

    Foo fooVar = new Foo();
    fooVar.Bar();    // call the Bar method
    
    或者,您可以定义一个不需要类实例的静态方法。例如:

    public class Foo {
        public void Bar() 
        {
            Console.WriteLine("Running the Bar method");
        }
    }
    
    public class Foo {
        public static void Bar() 
        {
            Console.WriteLine("Running the static Bar method");
        }
    }
    
    然后,您可以在代码中这样调用它:

    Exit();
    
    Foo.Bar();  // Foo is the name of class, not an object of type Foo
    

    另外,请查看C#和.Net的精彩介绍。

    我相信
    Microsoft.Xna.Framework.Game
    (我认为是继承自)提供了一种“更新”方法,您应该覆盖它

    重写基本上用您想要的任何内容替换基类的方法。在本例中,调用一个方法,该方法检查键盘的状态,并在按下escape时退出

    每次游戏应该更新自身(屏幕上的内容、玩家位置等)时,都会调用Update


    你遇到的问题不是调用这个方法。我并不是说你轻率,斯莱特博德;但我强烈推荐一本基本的编程书籍或课程,我会把学习XNA框架的想法搁置一边,直到你在C语言本身有一个坚实的基础。我一直在看教程,但是我不能理解它们,所以我在这里问。缺少的括号只是一个错误的复制/粘贴作业。我在msdn网站上查找了一些方法,并在自己的网站上进行了尝试。基本上这就是结果。从C#开始的一个很好的地方是查尔斯·佩佐尔德的“.Net Book Zero”。这是一本免费电子书,涵盖了C#和.Net的基础知识。应该让你开始。@Andrew:这不是.NETBookZero的意图。正如封面页所说,它教给C语言如何应用现有的C和C++技巧,它不包括基础知识。这个问题非常有说服力地证明Slateboard是一个新的程序员,而不是一个想要切换语言的人。我基本上是在学习如何准确地使用方法。除此之外,它还没有绑定到任何特定的程序。这将调用方法,或者这是方法本身?这是方法本身。您必须在某个地方调用Exit()来调用该方法。也许你应该在谷歌上搜索一些C#教程。@Slateboard看看你的其他一些问题,我可以建议:当你试图解决一个你陷入困境的特定问题时,使用StackOverflow(以及一般的论坛)是很好的,但是如果你正在学习,从一本好书(或教程)开始学习会更好、更快、更全面不要问你想学的东西的方方面面,这是有道理的。我怎样才能把这个应用到我想做的事情上呢?从你的代码中不清楚你到底想实现什么。如果您想编写一个名为Exit的方法,那么它需要是一个类的成员,然后您需要创建该类的实例。另一种方法是静态方法,它不需要实例。我将在我的答案中添加一个这样的示例。在您的示例中,关键字“this”指的是Exit是其成员的类的当前实例。因此,如果在用户按下Esc键时在代码中的某个地方调用Exit,则该方法将递归地调用自身,直到释放Esc键,或者堆栈填满(以先发生的为准)。