class A { private Int32 va; ... public int VA { set {va=value;} get {return va;} } 假如原先的实现如上,然后我修改了实现:class A { private Int64 va; ... public int VA { set {if(va=value;} get {return (int)va;} } public Int64 VA64 { ... }内部的实现细节被隐藏了,相关的变化对原来的代码不会产生太大的影响,至多是重新编译的问题。
使用set时可以使用IF语句对外部赋值数据进行限定,如果数据不合法、就可以禁止外部数据对变量进行赋值。
用的手机,篇幅有限就这些吧,嘿嘿…
你全部设为public意味着你房子里藏着的东西谁都可以进来拿
我想这不是你所希望的吧?封装的目的之一就是相当于只有和你有关系(有钥匙的人)才能进来拿你房间的东西。
这应该符合你日常的生活逻辑吧?竟然生活是这样,那么程序这样做你有啥不好理解的呢?
还有,外界看到一个类有一个名字叫“AAA”的属性,根本不能推断出这个类肯定有一个名叫aaa的变量。不一定的。
属性我可以只有Get()方法,没有set()方法啊,这样门不就关上了嘛
(1)AAA既实现了get,又实现了set;
(2)类中还有一个与AAA对应的同类型字段aaa;
(3)AAA的get就是简单的return aaa;没有其它代码;
(4)AAA的set就是简单的aaa = value;也没有其它代码;
——那你就当这是一种巧合算了。
不清楚你是指安全性还是指你的属性只存在GET或者SET二者中的任意一个。
不是属性里面必须要同时有取值和赋值的功能,有其一即可。它仅仅只是一扇小窗口,怎么用由你约定法则来控制。有些人只需从窗口取东西,有些人只需要往窗口里扔东西。
但属性也不是绝对的安全的,计算机中的安全永远是相对的。另外,属性的使用比对字段的使用可能更加耗费系统资源,但就其带来的好处来说这点资源损耗几乎可以忽略不计。
private string userName = string.Empty;
public string UserName
{
set {
this.userName = "".Equals(value) ? "我是空的" : value;
}
}
那么这个属性就为只写。。如果写入为""的话。那么属性的值就为“我是空的”
private string userName = string.Empty;
public string UserName
{
get {
return "".Equals(value) ? "我是空的" : value;
}
}
那么这个属性为只读。。如果写入为“”的话。那么返回的值就为“我是空的”。。不知道这样解释 和不合适
class A
{
private Int32 va;
...
public int VA
{
set
{va=value;}
get
{return va;}
}
假如原先的实现如上,然后我修改了实现:class A
{
private Int64 va;
...
public int VA
{
set
{if(va=value;}
get
{return (int)va;}
}
public Int64 VA64
{
...
}内部的实现细节被隐藏了,相关的变化对原来的代码不会产生太大的影响,至多是重新编译的问题。