面试题答案
一键面试局部函数
- 作用域范围:局部函数定义在方法内部,其作用域仅限于包含它的方法体。
- 特性:只能在定义它的方法内部被调用,对外部完全不可见。它可以访问包含方法的局部变量(包括参数),这种特性称为闭包。当包含方法执行完毕,局部函数也就超出了作用域。
- 示例:
class Program
{
static void Main()
{
int outerVariable = 10;
void LocalFunction()
{
Console.WriteLine($"访问外部变量: {outerVariable}");
}
LocalFunction();
}
}
在上述示例中,LocalFunction
定义在Main
方法内部,它可以访问Main
方法中的局部变量outerVariable
,但只能在Main
方法内部调用。
内联函数(C# 中实际为内联方法,通过[MethodImpl(MethodImplOptions.AggressiveInlining)]
特性实现类似效果)
- 作用域范围:内联方法与普通方法作用域规则一致,定义在类中,作用域为类的内部。只要在类的可访问范围内(根据访问修饰符决定,如
public
、private
等),就可以被调用。 - 特性:内联方法旨在减少方法调用的开销,编译器会尝试将方法调用替换为方法体的实际代码。它可以像普通方法一样访问类的成员(字段、属性、其他方法等),但不会像局部函数那样依赖特定方法内的局部变量。
- 示例:
using System.Runtime.CompilerServices;
class MathHelper
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int Add(int a, int b)
{
return a + b;
}
}
class Program
{
static void Main()
{
int result = MathHelper.Add(3, 5);
Console.WriteLine(result);
}
}
在这个示例中,Add
方法定义在MathHelper
类中,在Program
类的Main
方法中可以调用它,因为它是public
的。它的作用域是整个MathHelper
类以及任何可以访问MathHelper
类的地方。