【问题标题】:Strategies for when to use properties and when to use internal variables on internal classes?何时使用属性以及何时在内部类上使用内部变量的策略?
【发布时间】:2011-02-22 21:28:04
【问题描述】:

在我的几乎所有课程中,我都有属性和内部类变量的混合。我总是按照“property if you need it in external, class variable if not”的规则选择其中一个。但还有许多其他问题让我经常重新思考这一点,例如:

    1234563内部变量属性以防万一我必须从外部访问它们,因为无论如何大多数类都是内部类它不会在 API 上公开,因此内部变量是否可以从外部访问并不重要上课与否
  • 但是由于 C# 不允许您实例化,例如List<string> 定义中的属性,那么这些属性必须在每个可能的构造函数中初始化,所以这些变量我宁愿有内部变量,只是为了让事情更清晰,因为它们都在一个地方初始化

  • 如果构造函数/方法参数是驼峰式大小写,并且您将它们分配给帕斯卡大小写属性,而不是看到 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)类时,您有什么策略来决定是应该创建内部类变量还是属性?

【问题讨论】:

  • 您的代码 sn-p 的一些问题对您的问题没有帮助:该类是公共的,而不是内部的。 ReportItems 应该有一个私有的设置器。这本身就非常有利于财产。

标签: c# properties conventions class-variables


【解决方案1】:

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

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

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

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

【讨论】:

  • 你可以在 VS2005 中拥有自动属性,只要你使用正确版本的 C# 编译器构建
猜你喜欢
  • 2012-05-13
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
相关资源
最近更新 更多