2016-11-17 79 views
0

我是新來的,正在爲面向對象編程而苦苦掙扎。我只想在我的第三個方法'tableinfo'中使用返回值,但是我不知道如何僅將該值傳遞給其他方法,而無需再次運行前兩個方法。我所要做的只是將用戶輸入的值傳遞給第三種方法,而不必將每個值都放入兩次值,這是我知道獲得值的唯一方法,如果有人願意,我會非常感激可以幫助我獲得回報價值。這段代碼是我試圖做的一小段代碼,它的目的並不重要,我只是想創建一個例子來讓人們明白我的意思。 提前謝謝!如何在一個方法中只調用返回變量?

+0

爲什麼你要調用'Main'中的前兩個函數呢?你在'tableinfo'中再次調用它們,所以'Main'中的調用沒有實現任何效果 – UnholySheep

+2

檢查在你的tableInfo方法中移除對TableNumber和NumberOfPartons的兩個調用會發生什麼。這應該點燃蠟燭以瞭解面向對象 – Steve

回答

0

看起來您可能會對方法,屬性和字段之間的差異感到困惑。您的函數TableNumber()可能更準確地稱爲AskUserForTableNumber()或GetTableNumberFromInput()。類似的東西。您也正在設置成員字段並返回值。所以有很多方法可以存儲和檢索該值。如果成員字段表號被標記爲公開,您可以訪問它。或者在你的主要功能,你可以這樣做:

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 numberAtTablereturn tablenumber)不存在了,它們存儲在什麼離開調用的函數。

相關問題