代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

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

  •  4
  • Edward Tanguay  · 技术社区  · 15 年前

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

    • 在某个时候,我想从类外部使用一个内部变量,所以我必须 重构 它变成了一个属性,这让我想知道为什么我不把所有的内部变量都变成属性,以防我必须从外部访问它们,因为 无论如何,大多数类都是内部类 它不会在API上公开,所以内部变量是否可以从类外部访问并不重要。

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

    • 如果构造函数/方法参数是camel case,则C代码读取更清晰,并将它们分配给pascal case属性,而不是 歧义 看的 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)类时,在决定是否应该创建内部类变量或属性时,您的策略是什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   derek    15 年前

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

    private List<string> listItems = new List<string>();
    
    Public List<string> ListItems
    {
         get{return listItems;}
         set{listItems = value;}
    }
    

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