関数の中に関数を書くと、ローカル関数と呼ばれます
あまり現実的な例ではないですが、こういう感じで書けます
class SampleCode
{
    public void Sample()
    {
        void Output(string msg)
        {
            Console.WriteLine(msg);
        }
        Output("Hello C#");
    }
}
ローカル関数の外で宣言している変数名をローカル関数内で使用すると参照することができます
var obj = new SampleCode();
obj.Sample();
class SampleCode
{
    public void Sample()
    {
        var msg = "Hello C#!!";
        void Output()
        {
            Console.WriteLine(msg);
        }
        Output();
    }
}
本当は、ローカル関数の外側を参照させる意図がなかったのにうっかり参照してしまうケースを避けるために
staticをつけることで、静的ローカル関数が定義でき、この場合は外側で宣言した変数を参照することができなくなります
静的ローカル関数
var obj = new SampleCode();
obj.Sample();
class SampleCode
{
    public void Sample()
    {
        var msg = "Hello C#!!";
        static void Output()
        {
            Console.WriteLine(msg); // エラーになる
        }
        Output();
    }
}