7

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

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

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

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

4

7 回答 7

17

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

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

public int MyProperty { get; set; }

此代码由编译器自动转换为与您发布的代码相似的代码,使用此代码更容易声明属性,如果您不想在setorget方法中实现自定义逻辑,它们是理想的,您甚至可以使用不同的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;
   }
}
于 2012-05-31T04:12:15.897 回答
11

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

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

private int dataID;

public int DataID {
    get { return dataID; }
}

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

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

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]; }
}

定义该索引器后,您可以像这样访问 DataSet 的实例:

int member = dataSet[3];
于 2012-05-31T06:56:22.333 回答
4

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

http://www.dotnetperls.com/property

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

如果 UserName 和 UserPwd 是类变量,最好像这样使用

_userName 
_userPwd
于 2012-05-31T04:20:15.457 回答
2

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

于 2012-05-31T04:13:36.210 回答
2

HTTP_USER_NAME并且HTTP_USER_PASSWORD是您班级的公共财产。UserName并且UserPwd 可能是您的私人领域。而且您允许其他人通过这些公共属性设置或获取值。不能直接访问私有财产。您也可以在属性的 get 方法中执行一些逻辑。例如:您将有一个名为的公共属性Age,在该方法的 get 方法中,您可以读取名为“ dateOfBirth”的私有字段的值并进行一些计算( CurrentYear- dateOfBirth) 并将其作为年龄返回。

于 2012-05-31T04:15:54.013 回答
2

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

如果您想知道何时使用属性以及何时使用 Only fields,请查看链接Properties vs Fields – Why Does It Matter?(乔纳森·阿内贾)

于 2012-05-31T04:16:40.370 回答
1

属性(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# 编程指南)

于 2014-11-18T15:03:39.270 回答