C# 参数化方法的返回值?
我是C#新手,我不确定我是否了解参数化方法的使用。下面我添加了一些代码,这些代码是在我将要开发的任务中给出的。这是一个简单的GUI,带有一些要求名称和价格的文本框 第一行代码调用该方法,布尔变量inputOk需要一个true或false值,out参数也会“返回”一些值 在第二行代码中,我想,尽管名称和价格“返回”,我还是需要返回true或false才能让第一行代码正常工作?我只是想确定我能理解。由于我可以从文本框(如txtName.text)中获取输入值,所以在调用方法时不需要添加这个值?谢谢C# 参数化方法的返回值?,c#,C#,我是C#新手,我不确定我是否了解参数化方法的使用。下面我添加了一些代码,这些代码是在我将要开发的任务中给出的。这是一个简单的GUI,带有一些要求名称和价格的文本框 第一行代码调用该方法,布尔变量inputOk需要一个true或false值,out参数也会“返回”一些值 在第二行代码中,我想,尽管名称和价格“返回”,我还是需要返回true或false才能让第一行代码正常工作?我只是想确定我能理解。由于我可以从文本框(如txtName.text)中获取输入值,所以在调用方法时不需要添加这个值?谢谢
bool inputOk = ReadAndValidateInput(out customerName, out seatPrice);
private bool ReadAndValidateInput(out string name, out double price)
简单地说,是的,你在所有方面都是对的,但我确实认为你可能需要温习一下你的术语;方法的返回值是
return
ed,而括号中的内容是参数;当您调用方法时,它们被称为参数
了解更多细节
最好从第二行开始
布尔值是从方法返回的。name
和price
参数保证通过该方法进行修改(因为它们是out
,如果它们是ref
,则可能会被修改);而且,虽然可以将它们视为额外的返回值,但实际上机制完全不同:它们只是被称为输出参数
编辑-关于“输出参数”
输出参数仍然可以用来传递值(因此它们实际上是输入/输出)。然后,接收参数的方法必须确保它随后写入参数(因为它是out
)
结束编辑
如果该方法是在一个表单类中编写的,该类拥有一个textbox,那么,是的,您可以简单地使用textbox变量,而不必传入它;因为该方法是一种“实例方法”(与没有此的静态
相反),并且变量属于表单的同一实例
在第一行,yes-inputOk通过调用方法接收布尔返回值-将
customerName
和seatPrice
作为输出参数传递。方法返回后,假设没有异常发生,inputOk将设置为方法的返回值;这两个参数将接收由ReadAndValidateInput
方法调用设置的值。想象一下这样的情况,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
}
若调用的方法不更改值或不生成除返回值以外的新值,则不需要输出参数。您是对的-可以通过调用代码访问原始值。您通常应将其称为:
string name;
double price;
bool inputOk = ReadAndValidateInput(out customerName, out seatPrice);
所有三个变量都将在ReadAndValidateInput中获得赋值。
在C++中,不可能返回多个值,而“OUT”关键字则是使用的替代品。
但是,如果可能,最好避免。您还可以使用两个附加的get函数返回客户姓名和座位价格。非常奇怪的术语。大多数方法都有参数。谢谢你提供的信息。我想知道第一行代码。当我使用out customerName,out seatPrice时,它们是否也会像普通调用一样工作,这样我就可以在方法中使用customerName和seatPrice的值,或者它们只是等待将新值返回到调用中?我最初对此有一句话,但我把它删掉了,因为我认为这会混淆问题。是-可以使用这些参数将值传递到方法中。例如,如果该方法是为了保证
customerName
中的空格被删除,则可以传入预先验证的名称,并在该方法中执行name=name.Trim()
。当该方法返回时,调用方的客户名称将被修剪。