克隆对象提示不能将A类型强制转换成B类

问题描述

[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

克隆对象提示不能将A类型强制转换成B类的相关文章

类中的内存分配和指针类型强制转换问题

问题描述 类中的内存分配和指针类型强制转换问题 问题描述: template //element type class list { private: EleT data;//数据本身,即是需要的信息 list* prio;//the pointer of prior element list* next;//the pointer of next element list* last;//the last pointer of list int len;//the length of list

对象-java初学者关于引用数据类型 强制转换的问题

问题描述 java初学者关于引用数据类型 强制转换的问题 class TestDemo7{ public static void main(String[] args) { Animal a=new Dog("旺财",2); System.out.println("名字:"+a.getName()); System.out.println("年龄:"+a.getAge()); a.eat(); Dog dog=(Dog) a;// 强转为Dog类

C++中Operator类型强制转换成员函数解析_C 语言

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型.转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数.它的定义格式如下: 复制代码 代码如下: class <类型说明符1> { public: operator <类型说明符2>(); - } 这个转换函数定义了由<类型说明符1>到<类型说明符2

将C# Control类强制转换成其它服务器控件类型

C# Control类的显式转换主要应用于一些强制转换类型,要先用FOREACH进行了类型判断,然后将C# Control类转换成相对应的类型. 关于将C# Control类强制转换成其它服务器控件类型的提问 对页面内的所有服务器控件用FOREACH进行了类型判断,然后要将它们各自从C# Control类转换成其各自的类型,如果TEXTBOX等等来着.. 问题补充: foreach (Control ctl in this .Controls) { if (ctl的类型是Panel 而且 ID

java虚拟机在进行类型强制转换的时候究竟做了什么

问题描述 java虚拟机在进行类型强制转换的时候究竟做了什么 打个比方 A a = new A(): B b = (B)a: 这两行代码究竟是怎样在Jvm中实现的? 解决方案 子类继承父类之后,在new子类的时候,实际上父类也被构造出来了,因此子类实际上包含着父类的完整信息,也就因此可以完成向上转型,. 至于具体怎么实现的,我查了一下好像是堆分配的过程,贴两个链接,不误导了.http://blog.csdn.net/anjayxc/article/details/6063210http://ww

指针-数组名进行类型强制转换的问题

问题描述 数组名进行类型强制转换的问题 int main(void) { int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x, %x/n", ptr1[-1], *ptr2); return 0; } 为什么ptr2指向a[0]的第二个字节? 个人理解是数组名a是指向a[0]的指针,强制转换为int型变量,再加1,就相当于将原来所存放a[0]的地址当作

C语言中自动隐式转换与类型强制转换实例分析_C 语言

本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include<stdlib.h> #include<stdio.h> #include<conio.h> double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum<=q){ t=sum; //sum = sum+(n+1)/n;//自动隐式转换 sum

python类型强制转换long to int的代码_python

python2.4版本以后,如果int的值超出范围不会溢出,而是内部转换为long,在网上没有找到从long型强制转换成int的代码,这里所说的int取值范围是和java里一致,即用四个字节表示.自己写了一个函数,勉强可以用,供大家参考. 复制代码 代码如下: import sysdef LongToInt(value):    assert isinstance(value, (int, long))    return int(value & sys.maxint) 经过测试,在32位和64

sum-如何把datagridview里的一列数字加和,运行显示内容无法强制转换成double型,怎么做?

问题描述 如何把datagridview里的一列数字加和,运行显示内容无法强制转换成double型,怎么做? 求代码 如何把datagridview里的一列数字加和,运行显示内容无法强制转换成double型,怎么做? 解决方案 我会了...........