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

标签 c# properties conventions class-variables

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

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

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

  • 如果构造函数/方法参数是驼峰式大小写,并且您将它们分配给 pascal 大小写属性,而不是看到 templateIdCode歧义,C# 代码读起来会更清晰。并且必须环顾四周以查看它是局部变量、方法参数还是内部类变量,例如当你看到 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)类时,您在决定应该创建内部类变量还是属性时采用什么策略?

最佳答案

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

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

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

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

关于c# - 何时使用属性以及何时在内部类上使用内部变量的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2891309/

相关文章:

html - 不同的 CSS 标签属性

c# - Visual Studio 命名空间约定

c# - 为什么我在 Entity Framework 和 SQL Server 事务中得到不同的结果?

c# - FlowLayoutPanel 中文本框的自动宽度

python - Pandas DataFrame子类的属性 setter

java - C++ 中的设置/获取方法

C 中的相互依赖定义

c# - 单击按钮后如何更改模板

c# - ExecuteCore() vs OnActionExecuting(ActionExecutingContext filterContext)?

javascript - react : How to supply callback arrow functions to stateless functional child components?