我看到一些get set方法来设置值.有谁能告诉我这个的目的?
public string HTTP_USER_NAME
{
get
{
return UserName;
}
set
{
UserName = value;
}
}
public string HTTP_USER_PASSWORD
{
get
{
return UserPwd;
}
set
{
UserPwd = value;
}
}
Run Code Online (Sandbox Code Playgroud)
其实为什么要用这些东西.对于全球访问,还是有其他原因导致此类事情?
Jup*_*aol 16
它们只是访问者和变异者.这就是在C#中实现属性的方式
在C#3中,您可以使用如下自动实现的属性:
public int MyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
这段代码由编译器自动翻译成类似于你发布的代码,这段代码更容易声明属性,如果你不想在set
或者get
方法中实现自定义逻辑,它们是理想的,你甚至可以使用不同的代码set
使该属性不可变的方法的访问器
public int MyProperty { get; private set; }
Run Code Online (Sandbox Code Playgroud)
在前面的示例中,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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
看起来好像你理解了getter和setter的功能,而其他人回答了这个问题."普通"类变量(没有getter和setter)称为"fields","properties"(具有getter和setter)封装字段.
属性的目的是控制对字段的外部访问.如果您希望变量对外部逻辑是只读的,则可以省略setter,如下所示:
private int dataID;
public int DataID {
get { return dataID; }
}
Run Code Online (Sandbox Code Playgroud)
您还可以将setter设置为private,并实现相同的只读功能.
如果对象有可能为null(无论出于何种原因),则可以保证实例始终存在,如下所示:
private Object instance;
public Object Instance {
get {
if (instance == null)
instance = new Object();
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
属性的另一个用途是定义索引器.
//in class named DataSet
private List<int> members;
public int this[int index] {
get { return members[index]; }
}
Run Code Online (Sandbox Code Playgroud)
在定义了索引器的情况下,您可以像这样访问DataSet的实例:
int member = dataSet[3];
Run Code Online (Sandbox Code Playgroud)