2013-11-27 2 views
0

Я сейчас работаю через «A C# Crash Course» RB Whitaker. Я на Polymorphism главе в данный момент, и я застрял на этой части:Сложное определение метода C#

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 virtual и MakeMove() имеет смысл. Однако я не понимаю, почему перечисление (MoveDirection) помещено перед методом MakeMove(). Я подозреваю, что это имеет какое-то отношение к тому, где эта часть учебника:

Мы определяем наш метод MakeMove(), который использует перечисление, которое мы создали как параметр, и добавляем ключевое слово virtual.

Означает ли это, что для использования перечисления в качестве параметра для метода оно должно быть помещено перед методом, а не между круглыми скобками?

Любая помощь будет высоко оценена.

+5

Это не показатель, это тип возвращаемого значения/Справка. –

+1

Нет, это просто означает, что метод возвращает значение 'MoveDirection', так же, как' public virtual int foo() 'означает, что' foo' возвращает 'int'. Я думаю, что описание, которое автор дал, неверно и должно читать * «перечисление, которое мы создали как возвращаемое значение» * –

+2

Кажется, вы должны переключиться на другой учебник; 0 – BartoszKP

ответ

4

MoveDirection до MakeMove(), потому что это тип, возвращаемый этим методом. В C# вам нужно указать тип, возвращаемый методом, поставив его перед именем метода. Если метод ничего не возвращает, вам нужно поставить ключевое слово void.

От MSDN:

Методы могут возвращать значение вызывающей. Если тип возврата, , тип, указанный перед именем метода, не является недействительным, метод может вернуть значение с помощью ключевого слова return. Заявление с ключевым словом return, за которым следует значение, соответствующее типу возвращаемого значения, возвращает это значение вызывающему методу. Ключевое слово return также останавливает выполнение метода. Если тип возврата недействителен, оператор возврата без значения по-прежнему полезен для прекращения выполнения метода. Без ключевого слова return метод прекратит выполнение, когда он достигнет конца блока кода. Методы с невоидным типом возврата необходимы для использования ключевого слова return для возврата значения.


Что вы положили в скобках после имени метода, являются параметрами метода:

Определение метода задает имена и типы любых параметров, которые необходимы.

+1

А теперь я понимаю. Большое спасибо за ответ. – systematic

0

Это означает, что для того, чтобы использовать перечисление в качестве параметра для метода он должно быть помещено перед способом, а не между круглыми скобками?

Not.It может быть размещено в любом доступном для этого способа месте. Рекомендуемое место Enum в отдельном файле.

Для примера мы можем изменить класс, как это:

В первом файле:

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

В другом файле

namespace Inheritance 
{ 
    public enum MoveDirection { None, Left, Right, Up, Down }; 
} 
Смежные вопросы