解析C#面向对象编程中方法(method)的使用

2019-12-26 17:33:36刘景俊

result = obj.SquareANumber(obj.AddTwoNumbers(1, 2));
// The result is 9.
Console.WriteLine(result);

在这种情况下,使用本地变量 result 存储值是可选的。此步骤可以帮助提高代码的可读性,或者如果需要存储该方法整个范围内参数的原始值,则此步骤可能很有必要。

异步方法
通过使用异步功能,你可以调用异步方法而无需使用显式回调,也不需要跨多个方法或 lambda 表达式来手动拆分代码。Visual Studio 2012 中已引入异步功能。
如果用 async 修饰符标记方法,则可以使用该方法中的 await 运算符。当控件到达异步方法中的 await 表达式时,控件将返回到调用方,并在等待任务完成前,方法中进度将一直处于挂起状态。任务完成后,可以在方法中恢复执行。
注意
异步方法在遇到第一个尚未完成的 awaited 对象或到达异步方法的末尾时(以先发生者为准),将返回到调用方。
异步方法可以具有 Task<TResult>、Task 或 void 返回类型。Void 返回类型主要用于定义需要 void 返回类型的事件处理程序。无法等待返回 void 的异步方法,并且返回 void 方法的调用方无法捕获该方法引发的异常。
在以下示例中,DelayAsync 是具有 Task<TResult> 返回类型的异步方法。 DelayAsync 具有返回整数的 return 语句。因此,DelayAsync 的方法声明必须具有 Task<int> 的返回类型。因为返回类型是 Task<int>,DoSomethingAsync 中 await 表达式的计算如以下语句所示得出整数:


int result = await delayTask


startButton_Click 方法是具有 void 返回类型的异步方法的示例。因为 DoSomethingAsync 是异步方法,调用 DoSomethingAsync 的任务必须等待,如以下语句所示:await DoSomethingAsync();。 startButton_Click 方法必须使用 async 修饰符进行定义,因为该方法具有 await 表达式。


// using System.Diagnostics;
// using System.Threading.Tasks;

// This Click event is marked with the async modifier.
private async void startButton_Click(object sender, RoutedEventArgs e)
{
 await DoSomethingAsync();
}

private async Task DoSomethingAsync()
{
 Task<int> delayTask = DelayAsync();
 int result = await delayTask;

 // The previous two statements may be combined into
 // the following statement.
 //int result = await DelayAsync();

 Debug.WriteLine("Result: " + result);
}

private async Task<int> DelayAsync()
{
 await Task.Delay(100);
 return 5;
}

输出: 

 


Result: 5