在 Eclipse 中生成 setter 和 getter 时,选项之一是在类中使用 getter 和 setter,而不是直接访问类成员。这种级别的类内部封装有用吗?还是说这个想法太过分了?
如果您希望发生潜在的副作用 - 验证、日志记录等,我认为这是一个好主意。(在 C# 中,我希望能够声明一个变量和属性,并表示“仅”访问该变量是通过酒店。) 有时,您可能会发现您需要直接精确地设置变量,因为您
不想要副作用。例如,您可能需要一起设置两个变量,并且“之前”和“之后”状态都有效,但是单独设置任一属性都会导致验证失败。
在我看来,这是需要在编码指南中定义的内容。
对于吸气剂,您可以在更改表示时计算一个值,而不是访问字段。
我发现拥有私有/内部属性在这些情况下确实有帮助。
但我当然不会为任何会员这样做。
最新的 .NET/VS 在这里确实很有帮助,因为您可以这样声明属性:
public string SomeProperty
{
get;
set;
}
并且它有效地创建了幕后成员。我知道这对您没有帮助,但我认为这可能会引起您的兴趣:-)
这是代码:(使用 VS 2008 SP1 构建,针对 .net 3.5 - 我使用了 WPF 项目)。 WPF 项目中有 2 个项目,主窗口 (window1) 和我们正在测试的对象 (DataObject) 窗口上有一个标签,它与数据对象实例中的 Name 属性进行数据绑定。如果将 Name 属性转换为字段(删除 getter/setter),数据绑定将停止工作。
Window1.xaml:
<Window x:Class="WpfDatabinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Label Name ="Label1" Height="28" Margin="12,24,37,0" VerticalAlignment="Top" Content="{Binding Name}"></Label>
</Grid>
Window1.xaml.cs
using System;
using System.Windows;
namespace WpfDatabinding
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private DataObject ADataObject;
public Window1()
{
InitializeComponent();
this.ADataObject = new DataObject();
this.ADataObject.Name = "Hello!";
this.DataContext = this.ADataObject;
}
}
}
namespace WpfDatabinding
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private DataObject ADataObject;
public Window1()
{
InitializeComponent();
this.ADataObject = new DataObject();
this.ADataObject.Name = "Hello!";
this.DataContext = this.ADataObject;
}
}
}
DataObject.cs:
namespace WpfDatabinding
{
public class DataObject
{
// convert this to a field, and databinding will stop working
public string Name
{
get;
set;
}
}
}