参数化方法的返回值?

时间:2012-03-02 09:12:36

标签: c#

我是C#的新手,我不确定我是否理解参数化方法的使用。下面我添加了一些代码,我将在一个我将要开发的任务中给出。这是一个简单的GUI,有一些文本框要求输入名称和价格。

第一行代码调用方法,boolean变量inputOk需要true或false值,out参数也会“返回”某些值?

在第二行代码中,我想,尽管名称和价格“返回”,我还需要返回true或false以使第一行代码生效?只是想确定我理解它。因为我可以从文本框中获取输入值,如txtName.Text,我在调用方法时不需要添加此值?谢谢!

bool inputOk = ReadAndValidateInput(out customerName, out seatPrice);

private bool ReadAndValidateInput(out string name, out double price)

3 个答案:

答案 0 :(得分:1)

简单地说,是的,你在所有方面都是正确的,但我认为你可能需要弄清楚你的术语;方法的返回值是return ed,而括号中的东西是参数;当你调用方法时,它们被称为参数。

了解更多细节。

最好从第二行开始。

该方法的布尔值为return。保证nameprice参数可以被方法修改(因为它们是out,如果它们是ref那么它们可能是改性);并且,虽然是,但它们可以被认为是额外的返回值,实际上机制是完全不同的:它们只被称为输出参数

编辑 - 关于'输出参数'

输出参数仍可用于传入值(因此它们实际上是输入/输出)。接收参数的方法必须确保它然后写入它(因为它是out)。

结束编辑

如果该方法是在一个拥有文本框的表单类中编写的,那么,是的,您可以简单地使用textbox变量而不必将其传入;因为该方法是一个'实例方法'(而不是static,它没有this),并且该变量属于同一个表单实例。

在第一行,yes - inputOk从调用方法接收布尔返回值 - 传递customerNameseatPrice作为输出参数。方法返回后,假设没有异常发生,inputOk将被设置为方法的返回值;并且这两个参数将接收ReadAndValidateInput方法调用设置的值。

答案 1 :(得分:1)

想象一下情况,其中ReadAndValidateInput不仅会验证输入,还会进行一些计算并返回其他值 - 例如折扣。那就是你需要参数

的地方
double discount = 0;

if(ReadAndValidateInput(customerName, seatPrice, out discount))
{
   //do something with discount. You know that input was valid
}
else
{  // do not touch discount. User has not entered valid values
}

如果调用的方法不更改值或者不生成返回值以外的新值,则不需要输出参数。你是对的 - 可以从调用代码访问原始值。

答案 2 :(得分:1)

您通常应将其称为:

string name;
double price;
bool inputOk = ReadAndValidateInput(out customerName, out seatPrice);

所有三个变量都将在ReadAndValidateInput中获得指定值。 在C ++中,不可能返回多个值,然后'out'关键字可以替代使用。

但是,如果可能的话,最好避免使用它。您还可以使用两个额外的get函数来返回客户名称和座位价格。