hoho,好爽啊~
Blog的访问量终于突破10K大关了.
从3月份申请这个Blog以来(即加入到博客园以来),发了不少的Blog(hoho,相对以前的我而言),认识了不少的牛人(Cow?bull?ox?).技术提高了不少.真是High啊:)
感谢dudu提供了这么好的Blog,这么快的访问速度..
嘿嘿..最后一句话,向第二个10K进军:)
posted @ 2004-07-06 23:15 hbifts 阅读(451) 评论(2) 编辑
posts - 82, comments - 442, trackbacks - 38, articles - 27 |
||
|
hoho,好爽啊~ posted @ 2004-07-06 23:15 hbifts 阅读(451) 评论(2) 编辑 在前一个文章序列化对象 :)中,我提到了
在这里,我使用了序列化,因为序列化的一个好处就是可以还原原始的HashCode, 即,序列化前的对象的GetHashCode()的返回值和序列化后还原的GetHashCode()的返回值是一样的:) 但是,我今天刚刚试了一下,发现不是这样的..示例代码如下: using System; using System.IO; using System.Text; using System.Collections; using System.Runtime.Serialization.Formatters.Binary;![]() namespace TestForMapfile_Write![]() ![]() {![]() /**//// <summary> /// Summary description for Class1. /// </summary> class Class1![]() {![]() /**//// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args)![]() { Console.WriteLine("please input p / c or x / y: "); SharedMemory sm = new SharedMemory(); SharedMemory smClient; SharedMemory smHT; Client client; object obj; switch( Console.ReadLine()) ![]() { case "p": case "P": sm.Create( 10240,"Tiger"); client = new Client(); Console.WriteLine( client.GetHashCode()); client = new Client(); client.email = "tiger@msn.com"; client.id = 0; client.name = "tiger"; sm.CopyFrom( Ser(client).ToArray()); Console.WriteLine( client.GetHashCode()); Console.WriteLine("ok"); Console.ReadLine(); break; case "c": case "C": sm.Open( 10240,"Tiger"); MemoryStream ms = new MemoryStream( sm.CopyTo(0)); obj = Deser(ms); Console.WriteLine( obj.GetHashCode()); Console.WriteLine("ok"); Console.ReadLine(); break;![]() case "x": case "X": smHT = new SharedMemory(10234,"smht"); smClient = new SharedMemory(10234,"smClient"); Hashtable ht = new Hashtable(); obj = new Client(1,"tiger","hh"); smClient.CopyFrom( Ser(obj).ToArray()); ht.Add( obj,1); obj = new Client( 2,"unrule","unruldem"); smClient.CopyFrom( Ser(obj).ToArray()); ht.Add( obj,2); smHT.CopyFrom( Ser(ht).ToArray()); Console.WriteLine("OK"); Console.ReadLine(); break; case "y": case "Y": smHT = new SharedMemory(); smHT.Open(10234,"smht"); obj = Deser( new MemoryStream( smHT.CopyTo(0))); smClient = new SharedMemory(); smClient.Open( 10234,"smClient"); object obj1 = Deser( new MemoryStream( smClient.CopyTo(0)));![]() if( ((Hashtable)obj).ContainsKey( (Client)obj1)) { Console.WriteLine("win"); }![]() else { Console.WriteLine("Fail"); }![]() foreach( DictionaryEntry i in (Hashtable)obj) { Console.WriteLine( ((Client)i.Key).id); } Console.ReadLine(); break; } }![]() ![]() public static MemoryStream Ser(object obj) { MemoryStream ms = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms,obj); return ms; }![]() ![]() public static object Deser(MemoryStream ms) { BinaryFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(ms); } }![]() [Serializable]![]() class Client { public int id; public string name; public string email;![]() ![]() public Client() {}![]() public Client(int ID,string Name,string Email) { id = ID; name = Name; email = Email; } } }![]() 注意:使用的时候加入前面的.NET中使用Mapping File 的API :)中提到了SharedMemory类 运行时分别运行两个,一个输入X,一个输入Y 这里,我把两个Client对象放到一个Hashtable中,再分别把这些个对象序列化,通过MappingFile传给另一个EXE程序. 再反序列化.结果,输出的是Fail,但是Hashtable中确实是有原始的Client对象.. 结论: 通过这个例子,我发现,HashCode是和程序运行相关的,是相对于这个程序在当前运行期是唯一的. 所以了,我们如果想要把一个对象做为Hashtable中的Key同时把这个对象和这个Hashtable传给其它的应用程序(比如上面示例中的Client和Hashtalbe).请注意其对象的HashCode.:) 如果一定要传Hashtable过去.那么只要这个Hashtable的Key是.NET内置的数据类型,那照样可以正常使用:) so,我前面文章中提到的那个结论(最上面有写)是错的.希望大家在使用中注意一下子.Have a good luck~ posted @ 2004-07-06 21:51 hbifts 阅读(1545) 评论(1) 编辑 hoho,ROR终于开始招新了~ http://61.153.51.35/forum/attach/2004/07/06/1040823-rorkgme1.zip posted @ 2004-07-06 20:27 hbifts 阅读(1216) 评论(1) 编辑 Good news:)
--
posted @ 2004-07-06 20:24 hbifts 阅读(409) 评论(0) 编辑 |
||