C# 中“获取”和“设置”属性的用途是什么?

本文关键字:是什么 设置 获取 属性 | 更新日期: 2023-09-27 18:35:54

我看到一些设置值的方法。谁能告诉我这样做的目的?

public string HTTP_USER_NAME
{
      get 
      {
            return UserName; 
      }
      set 
      {
            UserName = value; 
      }
}
public string HTTP_USER_PASSWORD
{
      get 
      {
            return UserPwd; 
      }
      set 
      {
            UserPwd = value; 
      }
}

其实为什么要用这些东西。对于全球访问,还是有其他原因导致这种情况?

C# 中“获取”和“设置”属性的用途是什么?

它们只是访问器和突变器。这就是在 C# 中实现属性的方式

在 C# 3 中,可以使用自动实现的属性,如下所示:

public int MyProperty { get; set; }

此代码由编译器自动转换为类似于您发布的代码的代码,使用此代码更容易声明属性,如果您不想在 setget 方法中实现自定义逻辑,它们非常理想,您甚至可以对 set 方法使用不同的访问器使属性不可变

public int MyProperty { get; private set; }

在前面的示例中,MyProperty将仅在声明它的类外部读取,改变它的唯一方法是公开一个方法来执行此操作或仅通过类的构造函数。当您想要控制和显式实体的状态更改时,这很有用

当您想向属性添加一些逻辑时,您需要手动编写属性,实现 getset 方法,就像您发布的那样:

实现自定义逻辑的示例

private int myProperty;
public int MyProperty
{
   get
   {
       return this.myProperty;
   }
   set
   {
       if(this.myProperty <=5)
          throw new ArgumentOutOfRangeException("bad user");
       this.myProperty = value;
   }
}

似乎您了解getter和setter的功能,其他人也回答了这个问题。"普通"类变量(没有 getter 和 setter)称为"字段","属性"(具有 getter 和 setter)封装字段。

属性的目的是控制外部对字段的访问。如果希望变量对外部逻辑是只读的,则可以省略 setter,如下所示:

private int dataID;
public int DataID {
    get { return dataID; }
}

您还可以将资源库设为私有,并实现相同的只读功能。

如果对象有可能为 null(无论出于何种原因),您可以保证实例始终存在,如下所示:

private Object instance;
public Object Instance {
    get {
        if (instance == null)
            instance = new Object();
        return instance;
    }
}

属性的另一个用途是定义索引器。

//in class named DataSet
private List<int> members;
public int this[int index] {
    get { return members[index]; }
}

定义该索引器后,可以像这样访问数据集的实例:

int member = dataSet[3];

检查这些链接,..它们给出了明确的解释。

http://www.dotnetperls.com/property

http://code.anjanesh.net/2008/02/property-getters-setters.html

如果用户名和用户Pwd是类变量,最好像这样使用

_userName 
_userPwd

在 C# 中实现属性的标准方法。 UserNameUserPwd 是定义这两个方法的类的私有成员变量(string类型)。

HTTP_USER_NAMEHTTP_USER_PASSWORD是类的公共属性。 UserNameUserPwd可能是您的私人领域。你允许其他人通过这些公共属性设置或获取值。无法直接访问私人企业。您还可以在属性的 get 方法中执行一些逻辑。例如:您将有一个名为Age的公共属性,在该方法的get方法中,您可以读取名为" dateOfBirth"的私有字段的值并进行一些计算(当前年份出生日期)并将其返回为年龄。

属性

只是字段的访问器。它们允许执行某些操作(如果需要),并提供对字段的受控访问。

如果您想知道何时使用属性,

以及何时仅使用字段,请检查链接属性与字段 - 为什么重要?(乔纳森·阿内贾)

来自属性(C# 编程指南)

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

在此示例中,TimePeriod类存储时间段。在内部,该类以秒为单位存储时间,但名为 Hours 的属性使客户端能够以小时为单位指定时间。Hours属性的访问器执行小时和秒之间的转换。

class TimePeriod
{
    private double seconds;
    public double Hours
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}

class Program
{
    static void Main()
    {
        TimePeriod t = new TimePeriod();
        // Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;
        // Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }
}
// Output: Time in hours: 24

属性概述

  • 属性使类能够公开获取和设置值的公共方式,同时隐藏实现或验证代码。

  • get 属性访问器用于
  • 返回属性值,set 访问器用于分配新值。这些访问器可以具有不同的访问级别。有关更多信息,请参见限制访问器可访问性(C# 编程指南)。

  • value 关键字用于定义由 set 访问器分配的值。

  • 不实现 set 访问器的属性是只读的。

  • 对于不需要自定义访问器代码的简单属性,请考虑使用自动实现的属性的选项。有关更多信息,请参见自动实现的属性(C# 编程指南)。