编译器是否优化了由 lambda 在其声明中初始化的仿函数字段以使 lambda 静态?

Does the compiler optimize a functor field initialized in its declaration by a lambda to make the lambda static?

如果我像下面这样写 class:

using System;

namespace MyNamespace
{
    public class MyClass1
    {
        //example Functor
        public Func<int, bool> IsLeapYear { get; set; } = (year) => (year % 4u == 0u && year % 100 != 0) || (year % 400 == 0);
    }
}

对于 MyClass 的每个实例,我是否有一个不同的仿函数实例或对同一个实例的引用?

如果我这样做会怎样?

using System;

namespace MyNamespace
{
    public class MyClass2
    {
        private static readonly Func<int, bool> _isLeapYear = (year) => (year % 4u == 0u && year % 100 != 0) || (year % 400 == 0);
        public Func<int, bool> IsLeapYear { get; set; } = _isLeapYear;
    }
}

在这种情况下,我希望 MyClass2 的每个实例都肯定包含仿函数的相同实例。 我想知道 MyClass1 的代码是否等同于 MyClass2 的代码 因为我在同一个 class 中有大量的仿函数,我希望让我的代码更短.

我使用 .NetCore 3.1、C# 8.0、Visual Studio Enterprise 2019。(我用 标记了问题,因为我认为编译器是框架的一部分)。

[编辑:以粗体突出显示实际问题]

将是同一个实例。

public class MyClass1
{
    //example Functor
    public Func<int, bool> IsLeapYear { get; set; } = 
        (year) => (year % 4u == 0u && year % 100 != 0) || (year % 400 == 0);
}

var a = new MyClass1();
var b = new MyClass1();

// result = true
var result = object.ReferenceEquals(a.IsLeapYear, b.IsLeapYear);