<分区>
具有空访问器和没有访问器的属性之间的区别?
// Property with empty accessors
public string Name { get; set; }
// Property without accessor
public int Counter;
编辑:
编译器声明之外的含义意味着什么
标签 c#
<分区>
具有空访问器和没有访问器的属性之间的区别?
// Property with empty accessors
public string Name { get; set; }
// Property without accessor
public int Counter;
编译器声明之外的含义意味着什么
最佳答案
实际上第二个不是属性,它是公共(public)字段。
C# 中的属性只是两种方法的快捷方式 - 访问器和修改器(或获取和设置)。所以,当你写一些像
这样的属性时private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
编译器实际上会创建两个方法
public string get_Name() { return _name; }
public void set_Name(string value) { _name = value; }
当你写的时候
public string Name { get; set; }
然后编译器将生成这两个方法并为您生成后备存储(字段_name
)。
当你不使用get
和set
时,它就是简单的字段(如_name
),编译器不会生成任何方法.
第二个问题: What is the difference between a field and a property in C#
因为属性实际上是一个方法,它们可以是抽象的或虚拟的,可以被覆盖。属性可以是接口(interface)的一部分。属性可用于数据绑定(bind)。您可以向属性添加任何逻辑(例如引发某些事件、延迟加载或执行验证)。您可以为设置和获取属性定义不同的访问级别(例如私有(private)和公共(public))。对于公共(public)领域,这一切都不是真的。
关于c# - 具有空访问器或没有访问器的属性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204527/