C#中“get”和“set”属性的目的是什么?
我看到一些get set方法来设置值。 有谁能告诉我这个的目的?
public string HTTP_USER_NAME { get { return UserName; } set { UserName = value; } } public string HTTP_USER_PASSWORD { get { return UserPwd; } set { UserPwd = value; } }
其实为什么要用这些东西。 对于全球访问,还是有其他原因导致此类事情?
它们只是访问者和变异者。 这就是在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; } }
看起来好像你理解了getter和setter的function,而其他人回答了这个问题。 “普通”类变量(没有getter和setter)称为“fields”,“properties”(具有getter和setter)封装字段。
属性的目的是控制对字段的外部访问。 如果您希望变量对外部逻辑是只读的,则可以省略setter,如下所示:
private int dataID; public int DataID { get { return dataID; } }
您还可以将setter设置为private并实现相同的只读function。
如果一个对象有可能为null(无论出于何种原因),您可以保证实例始终存在,如下所示:
private Object instance; public Object Instance { get { if (instance == null) instance = new Object(); return instance; } }
属性的另一个用途是定义索引器。
//in class named DataSet private List members; public int this[int index] { get { return members[index]; } }
通过定义该索引器,您可以像这样访问DataSet的实例:
int member = dataSet[3];
检查这些链接,..他们给出了明确的解释。
http://www.dotnetperls.com/property
http://code.anjanesh.net/2008/02/property-getters-setters.html
如果UserName和UserPwd是类变量,最好像这样使用
_userName _userPwd
在C#中实现属性的标准方法。 UserName
和UserPwd
是定义了这两个方法的类的私有成员变量( string
类型)。
HTTP_USER_NAME
和HTTP_USER_PASSWORD
是您class级的公共属性。 UserName
和UserPwd
可以是您的私人字段。 而且您允许其他人通过这些公共属性设置或获取值。 没有直接访问私人的权利。 你也可以在属性的get方法中做一些逻辑dateOfBirth
:你将有一个名为Age
的公共属性,在get方法中,你可以读取你的私有字段的值“ dateOfBirth
”并做一些计算( CurrentYear-dateOfBirth)并将其作为Age返回。
属性只是字段上的访问者。 它们允许执行某些操作(如果需要),并提供对字段的受控访问。
如果您想知道何时使用属性,何时使用仅字段,请检查链接属性与字段 – 为什么重要? (Jonathan Aneja)
来自属性(C#编程指南)
属性是一种成员,它提供了一种灵活的机制来读取,写入或计算私有字段的值。 属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。 这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性。
在此示例中, TimePeriod
类存储时间段。 在内部,类以秒为单位存储时间,但名为Hours
的属性使客户端能够以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
属性概述
-
属性使类能够公开获取和设置值的公共方式,同时隐藏实现或validation代码。
-
get属性访问器用于返回属性值, set访问器用于分配新值。 这些访问者可以具有不同的访问级别。 有关更多信息,请参阅限制访问者辅助function(C#编程指南) 。
-
value关键字用于定义set访问器分配的值。
-
未实现set访问器的属性是只读的。
-
对于不需要自定义访问者代码的简单属性,请考虑使用自动实现属性的选项。 有关更多信息,请参见自动实现的属性(C#编程指南) 。
- 如何判断用户是否正在访问“/Default.aspx”或只是“/”
- 清除cookie,会话和formsauth后,Asp.net在注销时删除服务器上的会话
- 为Bargain Finder Max Flight选择不同的回程航class
- 通过AJAX使用页面方法/ Web服务进行ASP.NET本地化
- 如何使用输入元素提交包含多页表的表单
- 在C#.NET MVC应用程序中执行预定任务
- Asp.net Request.Browser.Crawler – 动态爬虫列表?
- 无法加载文件或程序集“app_code”或其依赖项之一
- UpdatePanel上的AsyncPostBackTrigger和PostBackTrigger之间的区别?