4

在我几乎所有的课程中,我混合了属性和内部类变量。我总是根据规则“如果您在外部需要它,则选择属性,如果不需要,则使用类变量”来选择一个或另一个。但还有许多其他问题让我经常重新思考这一点,例如:

  • 在某些时候,我想使用类外部的内部变量,所以我必须将它重构为一个属性,这让我想知道为什么我不只是将所有内部变量都设为属性,以防万一我不得不从外部访问它们,因为大多数类都是内部类,所以它不会暴露在 API 上,所以内部变量是否可以从类外部访问并不重要

  • 但是由于 C# 不允许您List<string>在定义中实例化例如属性,因此必须在每个可能的构造函数中初始化这些属性,所以这些变量我宁愿有内部变量,只是为了让事情更清晰,因为它们都被初始化了一个地方

  • 如果构造函数/方法参数是骆驼大小写,C# 代码会更清晰地读取,并且您将它们分配给帕斯卡大小写属性,而不是看到歧义templateIdCode并且必须四处查看它是否是局部变量、方法参数或内部类变量,例如它当您看到TemplateIdCode = templateIdCode这是分配给类属性的参数时,会更容易。这将是始终仅在内部类上使用属性的论据。

例如:

public class TextFile
{
    private string templateIdCode;
    private string absoluteTemplatePathAndFileName;
    private string absoluteOutputDirectory;
    private List<string> listItems = new List<string>();

    public string Content { get; set; }
    public List<string> ReportItems { get; set; }

    public TextFile(string templateIdCode)
    {
        this.templateIdCode = templateIdCode;
        ReportItems = new List<string>();
        Initialize();
    }
    ...

在创建内部(非 API)类时,您有什么策略来决定是否应该创建内部类变量或属性?

4

1 回答 1

1

如果我有一个私有变量,我发现以后需要公共访问,我只需创建一个将其用作私有成员的属性,例如:

private List<string> listItems = new List<string>();

Public List<string> ListItems
{
     get{return listItems;}
     set{listItems = value;}
}

这允许您创建对数据的公共访问,而无需重构任何代码。它还允许您在私有成员中初始化数据,而不必在构造函数中进行。
另一个优点是,您希望对访问公共属性的任何人执行的任何数据修改都可以在该属性的 getter 中完成。尽管 VS2008 引入了自动属性作为一个特性,我仍然更喜欢 VS2005 风格的属性。

于 2010-05-23T10:22:27.067 回答