如何在方法中只调用返回变量?

本文关键字:调用 返回 变量 方法 | 更新日期: 2023-09-27 18:18:24

我是新手,正在努力学习面向对象编程。我想在我的第三个方法'tableinfo'中只使用返回值,但我不知道如何仅将此值转移到其他方法,而无需再次运行前两个方法。所有我想做的就是只转移用户输入到第三个方法的值,而不必每次输入两次值,这是我知道获得值的唯一方法,如果有人能帮助我获得返回值,我将非常感激。这段代码是我想做的事情的一个小片段,它的目的并不重要,我只是想创建一个例子,试图让人们理解我的意思。提前感谢!

class Program
{
    static void Main(string[] args)
    {
        TableOrder TO = new TableOrder();
        TO.TableNumber();
        TO.NumberOfPartons();
        TO.tableinfo();
    }
}
class TableOrder
{
    int tablenumber;
    string inputtablenumber;
    int numberAtTable;
    string inputNumberAtTable;
    public int TableNumber()
    {
        Console.Write("please enter the table number:");
        inputtablenumber = Console.ReadLine();
        tablenumber = int.Parse(inputtablenumber);
        return tablenumber;            
    }
    public int NumberOfPartons()
    {
        Console.Write("please enter how many people are seated: ");
        inputNumberAtTable = Console.ReadLine();
        numberAtTable = int.Parse(inputNumberAtTable);
        return numberAtTable;
    }               
    public void tableinfo()
    {
        int tablenum = TableNumber();
        Console.Write(tablenumber + 1);
        int patrons = NumberOfPartons();
        Console.WriteLine(numberAtTable + 1);
    }
}

如何在方法中只调用返回变量?

看起来您可能对方法、属性和字段之间的区别感到困惑。您的函数tablennumber()可能更准确地称为askuserfortablennumber()或gettablenumberfromput()。差不多就是这样。您还设置了一个成员字段并返回该值。有很多方法可以存储和检索那个值。如果成员字段表号被标记为公共,则可以访问它。或者在main函数中这样做:

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 = gettablenumberfromput ();

首先,您可以删除main中的调用,因为方法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)不再存在,它们被存储在调用函数的剩余部分。