我们经常被告知我们应该通过为类字段制作getter和setter方法(C#中的属性)来保护封装,而不是将字段暴露给外部世界.
但是很多时候,一个字段只是用来保存一个值,并且不需要任何计算来获取或设置.对于这些,我们都会这样做:
public class Book
{
private string _title;
public string Title
{
get{ return _title; }
set{ _title = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,我有一个坦白,我不忍心写所有这些(真的,它不必写它,它不得不看它),所以我去流氓和使用公共领域.
然后是C#3.0,我看到他们添加了自动属性:
public class Book
{
public string Title {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这更整洁,我很感激它,但是真的,除了创建一个公共领域之外还有什么不同?
public class Book
{
public string Title;
}
Run Code Online (Sandbox Code Playgroud) string name;
Run Code Online (Sandbox Code Playgroud)
VS
string name {get; set;}
Run Code Online (Sandbox Code Playgroud)
假设你的get和set如上所述是空白的,那么指定它们有什么意义呢?
我在我的代码中使用"自动"属性,我想知道这段代码之间的实际区别是什么:
public class foo{
public int i;
}
Run Code Online (Sandbox Code Playgroud)
和
public class foo{
public int i {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我知道存在差异,因为我使用的正常第三方错过了公众成员,但发现他们曾经添加过{get; set;}.
由于背后没有私人领域,幕后背后会发生什么?
考虑以下两个选项:
public int Foo { get; set; }
public int Foo;
Run Code Online (Sandbox Code Playgroud)
它们似乎在语义上是等价的,我相信它们甚至会编译成同一个IL.那么使用该物业有什么好处?看到一个公共领域让我感到不安,但我想不出使用属性语法的任何具体优势.如果将来需要显式的getter和setter,public int Foo;则可以替换为public int Foo { ... }不需要其他更改.我能想到的最好的是属性语法感觉更好,但我很难用这个理由来说服其他人.
在这种情况下使用属性语法的优点(如果有的话)是什么?
我理解差异。两者之间。并阅读与此相关的主题。我的问题是关于任何性能提升。我曾经用局部变量创建属性。每当我在类中使用属性时,我都会使用局部变量而不是属性。我认为这有一点好处,而不是调用属性,然后调用局部变量的属性。在自动属性中,这是不可能的。我的假设正确吗?它在我的方法中是否有任何收益(可能很小)?
样本
Public class class1
{
private int _someField;
public int SomeField
{
get{return _someField;}
set {_someField = value;}
}
Public void Insert()
{
str= "insert into table values(" + SomeField + ")
//or is it better to use like this?
str= "insert into table values(" + _someField + ")
}
}
Run Code Online (Sandbox Code Playgroud) 在C#代码的许多样品包含get与set代码块.他们的目的是什么?我将这些块复制在示例代码中,但不知道它用于什么.有人可以向我解释一下吗?