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

标签 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;
            }
        }
    }

class Test2
    {
        int _var1;
        string _var2;

        public int var1
        {
            get;
            set;
        }

        public string var2
        {
            get;
            set;
        }
    }

最佳答案

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

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

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

关于C#属性,这两个实现有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18781752/

相关文章:

c# - 为什么我在此文件夹上收到 UnauthorizedAccessException?

c# - 传递给其他类的 Expando 动态对象需要 Microsoft.CSharp.dll?

java - twitter4j - 如何配置?

java - Wicket 无法解析测试中的属性

android - 通过 Eclipse 编辑 Android XML 布局中的多个元素

c# - XPath 选择特定的子元素

c# - ListView 组标题单击 - 在 Windows 7 中禁用全选

c# - C#中的 "new { id = 0 }"是什么类型?

java - 多个属性文件

hibernate - 如何分离 jdbc.properties 和我部署的 JAR 或 WAR 应用程序文件