注意:这是我刚刚开始C#时发布的。 随着2014年的知识,我可以真正地说,自动属性是曾经发生在C#语言的最好的事情之一。 我习惯于在C#中使用私有和公共字段来创build我的属性: private string title; public string Title { get { return title; } set { title = value; } } 现在,在.NET 3.0中,我们获得了自动属性: public string Title { get; set; } 我知道这是更多的哲学/主观的问题,但是有没有任何理由使用这些自动属性,除了保存每行的代码5行? 我个人的抱怨是这些属性隐藏了我的东西,我不是一个黑魔法的粉丝。 事实上,隐藏的专用字段甚至不会显示在debugging器中,这是可以的,因为get / set函数什么也不做。 但是当我想实际实现一些getter / setter逻辑时,我必须使用私有/公共对。 我看到了保存大量代码(一对六行)而不会丢失后来改变getter / setter逻辑的好处,但是我可以通过简单地声明一个公共字段“公共string标题” {get; 组; }块,从而甚至节省更多的代码。 那么,我在这里错过了什么? 为什么会有人想要使用自动属性?
你如何给C#自动属性一个默认值? 我要么使用构造函数,要么恢复到旧的语法。 使用构造函数: class Person { public Person() { Name = "Default Name"; } public string Name { get; set; } } 使用正常的属性语法 (使用默认值) private string name = "Default Name"; public string Name { get { return name; } set { name = value; } } 有没有更好的办法?
我们经常被告知我们应该通过为类字段创buildgetter和setter方法(C#中的属性)来保护封装,而不是将字段暴露给外部世界。 但是有很多时候,一个字段只是在那里保存一个值,并不需要任何计算来获取或设置。 对于这些我们都会做这个数字: public class Book { private string _title; public string Title { get{ return _title; } set{ _title = value; } } } 那么,我有一个自白,我不能写所有这些(真的,不必写,不得不看),所以我去stream氓,使用公共领域。 接下来是C#3.0,我看到他们添加了自动属性: public class Book { public string Title {get; set;} } 这是比较整洁的,我很感谢,但是真的,和公共领域有什么不同呢? public class Book { public string Title; }
我意识到这似乎是C#中的字段和属性之间有什么区别的重复? 但是我的问题有一点点差别(从我的观点来看): 一旦我知道了 我不会使用我的课程“只能在属性上工作的技巧” 我不会在getter / setter中使用validation码。 有没有什么区别(风格/未来发展的除外),如设置属性的某种types的控制? 是否有任何其他区别: public string MyString { get; set; } 和 public string myString; (我知道,第一个版本需要C#3.0或更高版本,并且编译器确实创build了私有字段。)