c# - 如何正确定义类属性?

标签 c# c#-3.0 properties automatic-properties

在项目中定义新类时,正确/最佳做法是什么? 过去我创建了如下类:

  public class MyClass
  {
      public string FirstName  {get; set;}
      public string LastName  {get; set;}
  }

通常我会使用这样的类在项目中创建集合。

然而,随着我继续学习和阅读更多有关 c# sharp 的信息,我看到了类定义为的示例:

    class MyClass //not set to public
    {
        private string  _firstName; //first defined as fields
        private string _lastName;

        public string FirstName  // then defined as properties 
        {
            get { return  _firstName; }
            set { _firstName = value; }
        }
        public string LastName
        {
            get { return _lastName; }
            set { _lastName = value; }
        }
    }

第一种方法在定义上是否不正确,或者这是 C# 中可接受的速记版本?作为最佳实践,您是否应该始终首先使用私有(private)字段定义类,然后使用获取/设置值将它们定义为属性?

我问是因为我在 C# 中自学,我正在努力改进并更好地理解正确的开发方法,一些示例和教程只是简单地陈述方法,而没有关于为什么首选一种方法的可靠解释(或应该完成)在另一个之上。

提前致谢

最佳答案

你的第一个例子:

public class MyClass
{
    public string FirstName  {get;  set;}
    public string LastName  {get;  set;}
}

具体是Auto-Implemented Properties , 在 c# 3.0 中引入。两种格式都没有错。第一个更像是一个“速记”。

对于更复杂的类型,有时使用旧样式仍然有用,并且仅公开私有(private)变量的某些属性或值,例如:

public class MyClass
{
    private Dictionary<int, List<string>> _someInternalDictionary;

    public int MyValuesCount
    {
        get
        {
            return _someInternalDictionary.Values.Count;
        }
    }

}

一个粗略的例子,但希望你明白我的意思。

关于c# - 如何正确定义类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3215649/

相关文章:

c# - 带有确定和取消按钮的弹出子窗口

c# - HasNoDiscriminator 在 EFCore 中的使用

c# - byte[] 并有效地通过引用传递

javascript - x.y 和 x ['y' ] 是否会导致主机对象出现不同的行为?

java - Hibernate log4j.properties 打印 DB uname 和 pass

c# - 用于 ASP.Net 中不同版本 Excel 的连接字符串

c# - Entity Framework 术语中的 "Model"和 "Context"有什么区别?

c# - 具有已知键列表的延迟加载缓存的多线程实现

c# - 如何使表单仅对应用程序最顶层?

javascript - 如何在严格模式下使用上下文评估自定义 javascript 表达式?