何时使用属性以及何时在内部类上使用内部变量的策略?

时间:2010-05-23 10:11:09

标签: c# properties conventions class-variables

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

  • 在某些时候我想在课堂外使用一个内部变量,所以我必须重构它到一个属性让我想知道为什么我不只是让我所有的内部变量属性,以防万一我必须在外部访问它们,因为大多数类都是内部类它没有在API上公开,所以如果内部变量可以从外部访问并不重要该课程是否

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

  • 如果构造函数/方法参数是camel case,并且将它们分配给pascal case属性而不是看到templateIdCode歧义并且不得不环顾四周,那么C#代码会更干净地读取查看它是局部变量,方法参数还是内部类变量,例如当您看到TemplateIdCode = templateIdCode这是一个分配给类属性的参数时,会更容易。这将是仅使用内部类的属性的论据。

e.g:

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)类时,您决定是否应创建内部类变量或属性的策略是什么?

1 个答案:

答案 0 :(得分:1)

如果我有一个我发现稍后需要公开访问的私有变量,我只需创建一个使用它作为私有成员的属性,例如:

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

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

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