我们经常被告知应该通过为类字段创建 getter 和 setter 方法(C# 中的属性)来保护封装,而不是将字段公开给外界。
但是很多时候,字段只是用来保存一个值,不需要任何计算来获取或设置。对于这些,我们都会做这个数字:
public class Book
{
private string _title;
public string Title
{
get => _title;
set => _title = value;
}
}
好吧,我有一个坦白,我无法忍受写所有这些(真的,它不必写它,它必须看它),所以我变得流氓并使用公共领域。
然后是 C# 3.0,我看到他们添加了自动属性:
public class Book
{
public string Title { get; set; }
}
哪个更整洁,我很感激,但实际上,除了做一个公共领域有什么不同呢?
public class Book
{
public string Title;
}
在我前段时间的一个相关问题中,有一个链接到杰夫博客上的帖子,解释了一些差异。
属性与公共变量
TryGetTitle(out book.Title); // requires a variable
忽略 API 问题,我发现使用属性最有价值的事情是调试。
CLR 调试器不支持数据断点(大多数本机调试器支持)。因此,无法在类上读取或写入特定字段时设置断点。在某些调试方案中,这是非常有限的。
由于属性是作为非常精简的方法实现的,因此可以在读取和写入其值时设置断点。这使他们在田野上占据了很大的优势。
从字段更改为属性会破坏合约(例如,需要重新编译所有引用代码)。因此,当您与其他类(任何公共(通常受保护的)成员(任何公共(通常受保护)成员)有互动点时,您需要为未来的增长做好计划。为此,请始终使用属性。
今天让它成为自动属性没什么,3 个月后意识到你想让它延迟加载,并在 getter 中放置一个空检查。如果您使用了一个字段,这充其量是重新编译更改,最坏的情况是不可能的,具体取决于谁和什么依赖于您的程序集。
模板简介:该模板名称为【C# 公共字段与自动属性】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。