属性是自动实现的对象与没有访问器的对象之间的区别

本文关键字:对象 访问 之间 区别 实现 属性 | 更新日期: 2023-09-27 17:53:34

两个对象,这两个对象的定义有什么区别?这让我困惑了一段时间,因为这个特定的对象被用作MVC控制器动作的参数,当来自视图的值被post时,第一个版本能够将模型绑定到被post回来的值。

//version 1
public class SecurityViewModel
{
    public string Identifier { get; set; }
    public string CrdId { get; set; }
}
// version 2
public class SecurityViewModel
{
    public string Identifier;
    public string CrdId;
}

无论使用哪个版本,我都可以使用

SecurityViewModel mymodel = new SecurityViewModel();
mymodel.Identifier = "this";
mymodel.CrdId = "that";

显然,即使没有自动实现的get和set,我仍然可以获取和设置属性的值

然而…

版本1有自动实现的属性,版本2只有声明的属性。两者都允许您在创建对象时设置/获取这些属性的值,但是版本1 是唯一一个将与定义为…的控制器方法上的模型绑定一起工作的。

public ActionResult Index(SecurityViewModel myModel)
谁能详细说明一下这个?

属性是自动实现的对象与没有访问器的对象之间的区别

MVC绑定到属性。第二个版本:

public class SecurityViewModel
{
    public string Identifier;
    public string CrdId;
}

使用字段,而不是属性。

参见c#中字段和属性的区别是什么?