我看到一些get set方法来设置值。谁能告诉我这个目的呢?
public string HTTP_USER_NAME
{
get
{
return UserName;
}
set
{
UserName = value;
}
}
public string HTTP_USER_PASSWORD
{
get
{
return UserPwd;
}
set
{
UserPwd = value;
}
}
其实为什么要用这些东西。对于全球访问,还是有其他原因导致此类事情发生?
答案 0 :(得分:16)
它们只是访问者和变异者。这就是在C#
中实现属性的方式在C#3中,您可以使用如下自动实现的属性:
public int MyProperty { get; set; }
这段代码由编译器自动翻译成类似于你发布的代码,这段代码更容易声明属性,如果你不想在set
内部实现自定义逻辑,它们是理想的。 get
方法,甚至可以为set
方法使用不同的访问器,使属性不可变
public int MyProperty { get; private set; }
在上一个示例中,MyProperty
将仅在声明它的类之外读取,唯一的变异方法是通过公开方法来实现它或仅通过类的构造函数。当您想要控制并明确实体的状态更改时,这非常有用
如果要为属性添加一些逻辑,那么您需要手动编写属性,实现get
和set
方法,就像您发布的那样:
实现自定义逻辑的示例
private int myProperty;
public int MyProperty
{
get
{
return this.myProperty;
}
set
{
if(this.myProperty <=5)
throw new ArgumentOutOfRangeException("bad user");
this.myProperty = value;
}
}
答案 1 :(得分:10)
似乎你理解了getter和setter的功能,而其他人回答了这个问题。 “Normal”类变量(没有getter和setter)称为“fields”,“properties”(包含getter和setter)封装了字段。
属性的目的是控制对字段的外部访问。如果您希望变量对外部逻辑是只读的,则可以省略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];
答案 2 :(得分:3)
检查这些链接,......它们给出了明确的解释。
http://www.dotnetperls.com/property
http://code.anjanesh.net/2008/02/property-getters-setters.html
如果UserName和UserPwd是类变量,最好像这样使用
_userName
_userPwd
答案 3 :(得分:2)
实施properties in C#的标准方式。 UserName
和UserPwd
是定义了这两种方法的类的私有成员变量(string
类型)。
答案 4 :(得分:2)
HTTP_USER_NAME
和HTTP_USER_PASSWORD
是您班级的公共属性。 UserName
和UserPwd
可能是您的私人字段。而且您允许其他人通过这些公共属性设置或获取值。没有直接访问私人的权利。你也可以在属性的get方法中做一些逻辑.Ex:你将有一个名为Age
的公共属性,在你的get方法中,你可以读取你的私有字段的值“{{1 “并进行一些计算(CurrentYear-dateOfBirth)并将其作为年龄返回。
答案 5 :(得分:2)
属性只是字段上的访问者。它们允许执行某些操作(如果需要),并提供对字段的受控访问。
如果您想知道何时使用“属性”,以及何时使用“仅”字段,请选中链接Properties vs Fields – Why Does it Matter? (Jonathan Aneja)
答案 6 :(得分:1)
来自Properties (C# Programming Guide)
属性是一种成员,它提供了一种灵活的机制来读取,写入或计算私有字段的值。属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性。
在此示例中,TimePeriod
类存储时间段。在内部,类以秒为单位存储时间,但名为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访问器用于分配新值。这些访问者可以具有不同的访问级别。有关详细信息,请参阅Restricting Accessor Accessibility (C# Programming Guide)。
value关键字用于定义设置访问者分配的值。
未实现 set 访问者的属性是只读的。
对于不需要自定义访问者代码的简单属性,请考虑使用自动实现属性的选项。有关详细信息,请参阅Auto-Implemented Properties (C# Programming Guide)。