2016-11-17 2 views
0

Я новичок и борюсь с ориентированным на объект программированием. Я хочу использовать только возвращаемое значение в моем третьем методе «tableinfo», однако я не знаю, как передать только это значение другим методам, не запуская первые два метода снова. Все, что я хочу сделать, это передача только того значения, которое пользователь вводит в третий метод, и не нужно вводить значения два раза каждый, это единственный способ узнать значение, и я был бы очень признателен, если бы кто-нибудь может помочь мне получить обратную стоимость. Этот код - крошечный фрагмент того, что я пытаюсь сделать, и цель не важна, я просто хотел создать пример, чтобы попытаться понять, что я имею в виду. Спасибо заранее!Как я могу вызвать только возвращаемую переменную в методе?

+0

Почему вы так называете первые две функции в «Main»? Вы вызываете их снова в 'tableinfo', поэтому вызовы в' Main' на самом деле ничего не добиваются – UnholySheep

+2

Проверьте, что произойдет, если вы удалите два вызова TableNumber и NumberOfPartons в методе tableInfo. Это должно зажечь свечу, чтобы понять ООП – Steve

ответ

0

Похоже, вы можете быть смущены различием методов, свойств и полей. Ваша функция TableNumber() может быть более точно названа AskUserForTableNumber() или GetTableNumberFromInput(). Что-то вроде того. Вы также устанавливаете поле члена и возвращаете значение. Таким образом, существует множество способов сохранить и получить это значение. Если элемент tablenumber поля поля был помечен как открытый, вы можете получить к нему доступ. Или в вашей основной функции вы можете сделать это:

int tablenum=TO.TableNumber(); 

, а затем повторно использовать это значение.

Еще одна странная вещь, которую вы делаете, заключается в сохранении входной строки в качестве поля члена. Если вам не нужно ссылаться на эту строку еще раз, то нет причин для того, чтобы быть членом объекта TableOrder, это может быть локальная переменная для функции, которая выполняет вход.

Но похоже, что вы пытаетесь использовать TableOrder.TableNumber как свойство. И это очень хорошо, может быть, правильно, но не так, как вы это делаете. Вот (вроде фантазии) способ сделать что-то подобное, что также использует концепцию ленивого загрузка ...

class TableOrder 
{ 
    private int? _tablenumber; 
    public int TableNumber 
    { 
     get 
     { 
      return _tablenumber ?? (_tablenumber=GetTableNumberFromInput()); 
     } 
     set 
     { 
      _tablenumber = value; 
     } 
    } 

    private static int GetTableNumberFromInput() 
    { 
     Console.Write("please enter the table number:"); 
     string inputtablenumber = Console.ReadLine(); 
     return int.Parse(inputtablenumber); 
    } 

    //(and so on for other member properties) 
} 

Таким образом, в первый раз вы пытаетесь получить доступ номера таблицы, он будет спросить пользователя для значения. После этого у вас уже будет значение, поэтому он больше не будет спрашивать. Обратите внимание, что этот тип подхода не является действительно необходимым и в основном полезен для ожидания загрузки значения, пока вам не понадобится использовать это значение. Вместо этого вы можете просто сделать что-то вроде: TableOrder.TableNumber = GetTableNumberFromInput();

0

Прежде всего, вы можете удалить вызовы в главном, так как метод tableinfo() будем называть их:

class Program 
{ 
    static void Main(string[] args) 
    { 
     TableOrder TO = new TableOrder(); 
     TO.tableinfo(); 
    } 
} 

Во-вторых, вы хотите использовать класс переменных, которые уже объявлены, Возвращенный значение две функции хранятся внутри них, и вы можете выводить их с помощью Write.

public void tableinfo() 
{ 
    tablenumber = TableNumber(); 
    Console.Write(tablenumber + 1); 

    numberAtTable = NumberOfPartons(); 
    Console.WriteLine(numberAtTable + 1); 
} 

В рамках этой функции, возвращаемые значения (return numberAtTable и return tablenumber) больше не существует, они хранятся в, что осталось от вызываемых функций.

Смежные вопросы