我是C#的新手
以下两者有什么区别:
public string MyValue;
和
public string MyValue { get; set; }
我一直以为这两者是相同的。但我的代码有问题,使用后者的形式可以解决问题。但不知道它们之间的区别。能帮忙解释一下吗?
谢谢
我是C#的新手
以下两者有什么区别:
public string MyValue;
和
public string MyValue { get; set; }
我一直以为这两者是相同的。但我的代码有问题,使用后者的形式可以解决问题。但不知道它们之间的区别。能帮忙解释一下吗?
谢谢
第一个是公共字段,第二个是自动实现的公共属性。
它们并不相同。使用自动实现属性时,编译器将生成一个私有的备份字段。
虽然两者都可以作为从您的类中公开数据的一种方式,但应遵循信息隐藏原则使用属性 - 字段应该是私有的,只能通过属性访问。这样可以在不破坏调用方的情况下对实现进行更改。
这两个实际上是非常不同的结构。
这种形式是为数据分配内存的唯一方式:
string MyData;
string MyData { get; set; }
string myDataField;
string MyData
{
get { return myDataField; }
set { myDataField = value; }
}
所以你可以看到它们非常不同,但最终它们都会创建一个用于存储的字段。然而,使用该属性可以实现更多未来的灵活性。
数据注释所需
对于使用数据注释(如[Required]
)的模型,ASP.NET 3.1需要使用自动实现的公共属性。
我曾经吃过苦头,发现公共字段不起作用。 ModelState.IsValid
将始终返回true
。