我是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)
答案 0 :(得分:1)
简单地说,是的,你在所有方面都是正确的,但我认为你可能需要弄清楚你的术语;方法的返回值是return
ed,而括号中的东西是参数;当你调用方法时,它们被称为参数。
了解更多细节。
最好从第二行开始。
该方法的布尔值为return
。保证name
和price
参数可以被方法修改(因为它们是out
,如果它们是ref
那么它们可能是改性);并且,虽然是,但它们可以被认为是额外的返回值,实际上机制是完全不同的:它们只被称为输出参数。
编辑 - 关于'输出参数'
输出参数仍可用于传入值(因此它们实际上是输入/输出)。接收参数的方法必须确保它然后写入它(因为它是out
)。
结束编辑
如果该方法是在一个拥有文本框的表单类中编写的,那么,是的,您可以简单地使用textbox变量而不必将其传入;因为该方法是一个'实例方法'(而不是static
,它没有this
),并且该变量属于同一个表单实例。
在第一行,yes - inputOk从调用方法接收布尔返回值 - 传递customerName
和seatPrice
作为输出参数。方法返回后,假设没有异常发生,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函数来返回客户名称和座位价格。