1)[Serializable]
public class a
{ }
和
public class a
{ }
区别???下面是网上的解释,木看懂谁给弄个实例看下,谢谢
如果你做远程方法调用(RPC)时,比如,服务器端有个类A及对象a,客户端需要无视网络的存在,直接调用对象a。这种情况下,就需要把类A设计为可序列化的,那么它的实例a也就可以实例化了。
说得简单点,在服务器的 命名空间中的对象a,肯定不能直接被客户端的命名空间中的一个对象调用,这不可能,对吧。
但是如果你把服务器的对象a中的特征属性(不一定是所有属性)变成xml,传送到客户端,然后客户端用你给的特征属性可以模拟的生成一个对象a。
这个过程就是 rpc,而要把对象a变成xml,就是序列化,反之,把xml变成模拟对象a就是反序列化。
以上是rpc中的序列化。
实际使用中,把app关闭的时候,内存对象可以通过序列化,可以变成可以保存的xml,这样,以便下次app再开得时候,把以前保存过的xml(或者txt等)反序列化成对象。
一句话,序列化就是把内存中对象以一种可以保存的形式保存起来。
需要注意的是:
序列化可以制定序列化整个类,或者 类的某些属性。
2)定义一个类public class a
{
public string aaa
{ set; get; }
}
和
public class a
{
public string aaa;
}
区别????我知道只是set是只写,只写get是只读,但两个都不写和两个都写没看出啥区别。
public class a
{ }
和
public class a
{ }
区别???下面是网上的解释,木看懂谁给弄个实例看下,谢谢
如果你做远程方法调用(RPC)时,比如,服务器端有个类A及对象a,客户端需要无视网络的存在,直接调用对象a。这种情况下,就需要把类A设计为可序列化的,那么它的实例a也就可以实例化了。
说得简单点,在服务器的 命名空间中的对象a,肯定不能直接被客户端的命名空间中的一个对象调用,这不可能,对吧。
但是如果你把服务器的对象a中的特征属性(不一定是所有属性)变成xml,传送到客户端,然后客户端用你给的特征属性可以模拟的生成一个对象a。
这个过程就是 rpc,而要把对象a变成xml,就是序列化,反之,把xml变成模拟对象a就是反序列化。
以上是rpc中的序列化。
实际使用中,把app关闭的时候,内存对象可以通过序列化,可以变成可以保存的xml,这样,以便下次app再开得时候,把以前保存过的xml(或者txt等)反序列化成对象。
一句话,序列化就是把内存中对象以一种可以保存的形式保存起来。
需要注意的是:
序列化可以制定序列化整个类,或者 类的某些属性。
2)定义一个类public class a
{
public string aaa
{ set; get; }
}
和
public class a
{
public string aaa;
}
区别????我知道只是set是只写,只写get是只读,但两个都不写和两个都写没看出啥区别。
具体为什么,就好比你要一个string 他给你一个object 他必须要同时告诉你这是string 同时你给tostring一下,,基本就是这个道理2.public 你可以让他 只get 不set么? 而属性可以,你设置一个get 他就只能读,你设置一个set 他就只能赋值,这就是属性最大的好处你可以控制他的可读写性质。这个是public约束不了的
如果你用属性 set里写一个方法 str = "被改过:"+ value;
这样他所有的操作都是透明的,你可以随意的加你喜欢的限制,或者别的东西
可以先查查 序列化/反序列化 的简单应用,再去摸索它的原理也未尝不可
下面这个State是只读属性,在类里修改它对应的私有字段即可改变值,但是在类的外部(比如其它调用这个类型的类)是没有办法直接修改State的(对于修改是封闭的)
想象一个如果把下面这个类的State换成你的字段?
public class Test
{
private bool _state;
private int _input; //构造方法
public Test(int input)
{
this._state = input > 10;
} //只读属性
public bool State
{
get { return _state; }
} public void OtherMethod()
{
//判断逻辑并改变属性
this._state = false;
}
}
单纯的 get,set 和 field 在直接的使用上没有什么差别。
但有些复杂场合,就必须用Property,也建议用Property,即便只是多打个get,set
比如有些序列化类不会序列化field字段和非public属性
另外,反射的时候字段用 Type.GetFields() 取,属性用 Type.GetProperties()