问题描述
[Serializable]publicpartialclassA{}publicclassB():A{publicB():base(){}}Aa=newA()....Bb=a.CreateClone<B>();publicstaticTCreateClone<T>(thisAa){using(StreamobjectStream=newMemoryStream()){IFormatterformatter=newBinaryFormatter();formatter.Serialize(objectStream,a);objectStream.Seek(0,SeekOrigin.Begin);return(T)formatter.Deserialize(objectStream);//==>报错:不能将A类强制转换成B类}}
解决方案
解决方案二:
不但不能转换,而且是在运行时崩溃的(不是在编译时出错)。这种代码更危险。这种代码你想干嘛呢?你怎么定义你的“克隆”的概念?
解决方案三:
不要滥用泛型。先把你要设计出来的那种概念理清了。
解决方案四:
按照你的代码所表现的逻辑,假设女人是人(确实是),那么所有的人就都可以转换为女人。我觉得这种逻辑毁三观了。
解决方案五:
嗯,我还是给你写出实际的程序设计模式吧。通常人的逻辑是这样的Aa=newA()....Bb=aasB;if(b!=null){.......}else{......}
这就是“某人如果是女人,则.....”的逻辑方式。根本用不着什么过分的技术,谈不长纯编程领域的“克隆”这种词儿,而且代码成文自明。“克隆”这种过分技术化的词儿,反而没有多大用。除非你能在概念上另外解释你的“克隆”具有什么实际应用领域的对应含义。
时间: 2024-10-25 05:41:49