令人困惑的C#方法定义

时间:2013-11-27 11:42:57

标签: c# methods enums polymorphism

我目前正在研究RB Whitaker的“A C# Crash Course”。我现在正处于Polymorphism章节,我仍然坚持这一部分:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Inheritance
{
    public enum MoveDirection { None, Left, Right, Up, Down };

    class Player
    {
        public virtual MoveDirection MakeMove()
        {
            return MoveDirection.Left;
        }
    }
}

我理解一切:

public virtual MoveDirection MakeMove()

使用public virtualMakeMove()是有道理的。但是,我不明白为什么枚举(MoveDirection)放在方法MakeMove()的前面。我怀疑它与本教程的这一部分有关:

  

我们定义MakeMove()方法,它使用我们创建的枚举作为参数,并添加虚拟关键字。

这是否意味着为了使用枚举作为方法的参数,它应该放在方法之前,而不是放在圆括号之间?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

MoveDirectionMakeMove()之前,因为它是该方法返回的类型。在C#中,您需要通过将方法名称放在方法前面来指定方法返回的类型。如果该方法没有返回任何内容,则需要添加void关键字。

来自MSDN

  

方法可以向调用者返回一个值。如果返回类型方法名称之前列出的类型不是void,则该方法可以使用return关键字返回该值。带有return关键字后跟一个与返回类型匹配的值的语句会将该值返回给方法调用者。 return关键字也会停止执行该方法。如果返回类型为void,则不带值的return语句仍然可用于停止方法的执行。如果没有return关键字,该方法将在到达代码块的末尾时停止执行。使用非void返回类型的方法需要使用return关键字来返回值。


您在方法名称后面的括号中放置的是方法的参数:

  

方法定义指定所需参数的名称和类型。

答案 1 :(得分:0)

  

这是否意味着为了使用枚举作为参数   它应该放在方法之前的方法,而不是介于两者之间的方法   圆括号?

Not。它可以放在这个方法所在的任何可访问位置。建议将Enum放在单独的文件中。

例如,我们可以改变这样的类:

在第一个档案中:

namespace Inheritance
{
    class Player
    {
        public virtual MoveDirection MakeMove()
        {
            return MoveDirection.Left;
        }
    }
}

在其他档案中

namespace Inheritance
{
    public enum MoveDirection { None, Left, Right, Up, Down };
}
相关问题