这是我不太一致的事情,并且总是对其他人的行为感到好奇。
您如何访问内部属性(私有或公共)?
例如,你有这个属性:
Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
在另一个函数中的同一个类中,您更喜欢哪一个?为什么?
_Name = "Johnny"
或
Name = "Johnny"
忽略我使用Name代替Me.Name。
的事实答案 0 :(得分:12)
就个人而言,我更愿意尽可能使用该物业。这意味着您仍然可以获得验证,并且您可以轻松地在属性访问上添加断点。当您试图对两个相互验证的属性进行更改时,不工作 - 例如,“min和max”对,其中每个属性都有一个验证约束,使{始终{1}}。你可能有(C#):
min <= max
在将来的某个时候,我希望看到C#能够在属性中声明支持字段,这样它就是仅仅属性的私有:
public void SetMinMax(int min, int max)
{
if (max > min)
{
throw new ArgumentOutOfRangeException("max";
}
// We're okay now - no need to validate, so go straight to fields
this.min = min;
this.max = max;
}
在酒店外,您根本无法public string Name
{
string name;
get { return name; }
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
name = value;
}
}
,name
。我们已经将其用于自动实现的属性,但它们不能包含任何逻辑。
答案 1 :(得分:2)
我会说
Name = "Johnny"
原因是我可能有一些验证(或触发器,或延迟初始化,或......),或者可能稍后决定插入一些验证,在分配Name时我想确保触发该代码。< / p>
答案 2 :(得分:1)
我更喜欢:
Name = "Johny"
对我来说,原因很简单,如果_Name发生了不好的事情,你总是可以在getter / setter中输出一些输出并找出导致问题的原因。
答案 3 :(得分:0)
这很有意思,我想大部分人都在做我做的事情
Me.Name = "Johnny"
或
Name = "Johnny"
然而,我见过的大部分项目都是
_Name = "Jonny"
式。我认为这是一个坏主意,并且由于答案你确认了它。即使是多个工具生成的大多数自动代码都使用直接访问。
是否有任何特定的性能影响?或者,如果set或get中没有额外的代码,编译器会对其进行优化。
答案 4 :(得分:0)
使用属性(名称)。我认为一个属性应该是底层字段(_name)的唯一“所有者”。
在属性下封装字段的优点: