C#属性,这两个实现有什么区别?

Jai*_*dra 3 c# properties

以下两个POCO类的实现有什么区别?

class Test
    {
        int _var1;
        string _var2;

        public int var1
        {
            get
            {
                return _var1;
            }
            set
            {
                _var1 = value;
            }
        }

        public string var2
        {
            get
            {
                return _var2;
            }
            set
            {
                _var2 = value;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

class Test2
    {
        int _var1;
        string _var2;

        public int var1
        {
            get;
            set;
        }

        public string var2
        {
            get;
            set;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 6

第一个是带有支持字段的常规属性实现,第二个是自动实现的属性,并且不会使用这些字段,因为编译器将为您生成支持字段.

自动实现的属性使您不必编写支持字段和样板代码来访问它们,编译器在IL中创建C#不可命名的支持字段,这些字段不会与类中的其他字段名称冲突.

最终效果是它们是等价的,虽然我听说由于支持字段的名称而导致自动属性的序列化问题,让我找到问题...抱歉我现在似乎无法找到它.