考虑这些课程:
class ClassA
{
public int x;
}
class ClassB : ClassA
{
public int y;
}
然后,在代码中的某处我实例化一个新的ClassA
:
var o = new ClassA();
var anotherRef = o;
这意味着我从sizeof(ClassA)
这样的地址开始获得大小为0x100
(比如说4个字节)的一块内存。
然后我决定将o
的类型更改为ClassB
并添加y
的值。
所以我希望o
仍为0x100
的地址,但大小为sizeof(ClassB)
(比如说8个字节)。
SomeMagicToChangeType(o, new ClassB());
// Now anotherRef should be a ClassB
在这种情况下,它会对anotherRef有用,因为它将引用正确的实例。
是否有可能在C#中做这样的事情?
答案 0 :(得分:2)
简而言之:不,你不能在C#中做到这一点。
ClassB
分配给o
,因为它是ClassA
的强类型。如果你想做这种诡计,你需要另外一种语言而不是C#。
答案 1 :(得分:0)
我相信你真的不在乎记忆地址,是吗?
如果是这样,你可以修改一个B类,例如添加一个因子
B(A a) {
this.x=a.x;
}
然后以某种方式“转换”你A到B:
B converted = new B(yourOldA);