在我看过的大部分代码中(在SO上,我都会在我自己的代码中使用codeproject.com),我已经看到为一个类包含的每个私有字段创建公共属性,即使它们是最多的基本类型get; set;:
private int myInt;
public int MyInt
{
get { return myInt; }
set { myInt = value }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:这与以下方面有何不同:
public int MyInt;
Run Code Online (Sandbox Code Playgroud)
如果我们应该使用属性而不是公共字段,为什么我们应该在这种特定情况下使用它们呢?(我不是在讨论更复杂的例子,其中getter和setter实际上做了一些特殊的事情,或者只有一个get或set(只读/写)而不是只返回/设置私有字段的值).它似乎没有添加任何额外的封装,只在IntelliSense中提供一个漂亮的图标,并放在类图中的特殊部分!
有人可以解释一下使用Auto-Implemented Properties c#背后的想法吗?
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有动力使用私有字段的属性,因此我们可以确定如何访问私有字段.但在这里 - 就像从一开始就将这个领域定义为公开一样.没有?
将字段定义为"public const"或将其定义为具有get-only属性之间是否存在差异?
我认为它是在.net 2.0中,微软推出了一个缩写为类似的访问器
public string Name { get; set; }
但是上面的代码之间是否有任何真正的区别,并且简单地说:
public string Name;
Run Code Online (Sandbox Code Playgroud) 为对象定义属性而不是直接访问私有变量有什么好处?
代替 :
public class A
private _x as integer = 0
Public property X() as integer
Get
return _x
End Get
Set(ByVal value As integer)
_x = value
End Set
End Property
end class
Run Code Online (Sandbox Code Playgroud)
为什么我们不能做以下事情:
public class A
public _x as integer = 0
end class
Run Code Online (Sandbox Code Playgroud)
有什么好处?
所以我知道类和结构是数据的结构.类字段默认为私有字段和结构字段 - 公共字段.喜欢public: / int a;C++和public int a;C#
但是访问这些字段的其他方法是将它们设为私有并使用函数/方法.喜欢SetValue(int value){a = value;}和/ GetValue() { return a; }或者我甚至听说过{set; get;}C#的新酷.
但为什么呢?许多人告诉我'其他人可以通过这种方式访问你的变量,所以让他们私有化'.我不明白,它有什么区别让它们公开,只是使用它们obj.a = 3;或让它们变得私密和干嘛obj.SetValue(3);?有人(甚至可以简要地)解释一下这些差异是什么以及如何在他们公开的时候进入这些领域?
我创建的两个属性之间有什么区别(即优势/劣势)?两者似乎都是正确的,但在类中声明属性的最佳方式(实践)是什么?
[Serializable]
public class MySample
{
public string String1 = string.Empty;
private string _string2 = string.Empty;
public string String2
{
get { return _string2 ; }
set { _string2 = value; }
}
}
Run Code Online (Sandbox Code Playgroud)