Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么以及何时使用属性_Asp.net - Fatal编程技术网

Asp.net 为什么以及何时使用属性

Asp.net 为什么以及何时使用属性,asp.net,Asp.net,我对asp.net中的属性感到非常困惑。 我只是不明白我们为什么要使用属性,以及何时应该使用它们。有人能详细说明一下吗 public class Customer { private int m_id = -1; public int ID { set { m_id = value; } } private string m_name = string.Empty; pu

我对asp.net中的属性感到非常困惑。 我只是不明白我们为什么要使用属性,以及何时应该使用它们。有人能详细说明一下吗

public class Customer
{
    private int m_id = -1;

    public int ID
    {
        set
        {
            m_id = value;
        }
    }

    private string m_name = string.Empty;

    public string Name
    {
        set
        {
            m_name = value;
        }
    }

    public void DisplayCustomerData()
    {
        Console.WriteLine("ID: {0}, Name: {1}", m_id, m_name);
    }
}
属性提供了通过属性对类中的字段进行读写来保护字段的机会。在其他语言中,这通常是通过实现专门的getter和setter方法的程序实现的。C#属性支持这种类型的保护,同时还允许您像访问字段一样访问属性

属性优于字段的另一个好处是,您可以随时间更改其内部实现。对于公共字段,基础数据类型必须始终相同,因为调用代码依赖于相同的字段。但是,使用属性,可以更改实现。例如,如果一个客户的ID最初存储为int,那么您可能会有一个需求更改,该更改使您执行验证,以确保调用代码永远不会将ID设置为负值。如果它是一个字段,您将永远无法执行此操作,但属性允许您在不破坏代码的情况下进行此类更改。现在,让我们看看如何使用属性

取自

属性提供了通过属性对类中的字段进行读写来保护字段的机会。在其他语言中,这通常是通过实现专门的getter和setter方法的程序实现的。C#属性支持这种类型的保护,同时还允许您像访问字段一样访问属性

属性优于字段的另一个好处是,您可以随时间更改其内部实现。对于公共字段,基础数据类型必须始终相同,因为调用代码依赖于相同的字段。但是,使用属性,可以更改实现。例如,如果一个客户的ID最初存储为int,那么您可能会有一个需求更改,该更改使您执行验证,以确保调用代码永远不会将ID设置为负值。如果它是一个字段,您将永远无法执行此操作,但属性允许您在不破坏代码的情况下进行此类更改。现在,让我们看看如何使用属性

这很容易。 类中的所有字段都必须是私有的(或受保护的)。要向另一个类显示字段,可以使用属性或get/set方法。属性较短

注意:不要声明只写属性。这是最糟糕的做法。

很简单。 类中的所有字段都必须是私有的(或受保护的)。要向另一个类显示字段,可以使用属性或get/set方法。属性较短


注意:不要声明只写属性。这是最糟糕的做法。

有几个很好的理由。首先,您可能需要在setter中添加验证逻辑,或者在getter中实际计算值


另一个原因与生成的IL代码有关。如果您正在处理分布在多个程序集上的大型项目,则可以更改属性背后的代码,而无需使用程序集的应用程序重新编译。这是因为属性的“访问点”保持不变,同时允许更改其背后的实现代码。我第一次读到这篇文章是在我研究自动属性的时候,因为我没有看到它们和普通公共变量之间的区别。

有几个很好的理由。首先,您可能需要在setter中添加验证逻辑,或者在getter中实际计算值


另一个原因与生成的IL代码有关。如果您正在处理分布在多个程序集上的大型项目,则可以更改属性背后的代码,而无需使用程序集的应用程序重新编译。这是因为属性的“访问点”保持不变,同时允许更改其背后的实现代码。我第一次读到这篇文章是在研究自动属性的时候,因为我没有看到自动属性和普通公共变量之间的区别。

属性是封装类数据的方便方法。 引用MSDN:

属性是提供灵活的读取机制的成员, 写入或计算私有字段的值。可以使用属性 好像它们是公共数据成员,但实际上它们是特殊的 方法称为访问器。这使数据能够轻松、高效地访问 仍然有助于提高方法的安全性和灵活性

让我们考虑两个常见的场景:

1) 要公开Name属性而不使其在类外部可更改:

  private string m_name = string.Empty;
  public string Name
  {
      get
      {
         return m_name;
      }
  }
2) 每次访问或设置数据时,都要执行一些检查或运行一些代码:

  private string m_name = string.Empty;
  public string Name
  {
      get
      {
         return m_name;
      }
      set
      {
         m_name = (String.IsNullOrEmpty(value)) ? "DefaultName" : value;
      }
  }
见:

属性是封装类数据的方便方法。 引用MSDN:

属性是提供灵活的读取机制的成员, 写入或计算私有字段的值。可以使用属性 好像它们是公共数据成员,但实际上它们是特殊的 方法称为访问器。这使数据能够轻松、高效地访问 仍然有助于提高方法的安全性和灵活性

让我们考虑两个常见的场景:

1) 要公开Name属性而不使其在类外部可更改:

  private string m_name = string.Empty;
  public string Name
  {
      get
      {
         return m_name;
      }
  }
2) 每次访问或设置数据时,都要执行一些检查或运行一些代码:

  private string m_name = string.Empty;
  public string Name
  {
      get
      {
         return m_name;
      }
      set
      {
         m_name = (String.IsNullOrEmpty(value)) ? "DefaultName" : value;
      }
  }
见:

最重要的原因是为了在setter中进行验证,而操作部分可以在get部分实现。 例如。 存储工作日,应该是1-7,如果我们使用普通变量并将其声明为public,任何人都可以指定任何值。 但在属性设置器中,您可以控制和验证

下一个你可以用它来追踪。也就是说,你知道怎么做