相关疑难解决方法(0)

当你做GetType()时真的会发生什么?

我们知道,C#对象有一个指向它们类型的指针,因此当你调用GetType()它时,检查指针并返回一个对象的实际类型.但如果我这样做:

A objA = new A();
object obj = (object)objA;
if (obj.GetType() == typeof(object)) ; // this is true
Run Code Online (Sandbox Code Playgroud)

但这里发生了object obj = (object)objA;什么?它是否创建了某种引用对象,它引用objA了一个类型指针object,或者它是一个全新的对象,恰好指向相同的属性,字段等objA?当然,您现在可以访问这两个对象,它们将具有不同的类型,但指向相同的数据.这是如何运作的?

另一个问题是:GetType()是否保证返回对象的实际类型?例如,假设有一个带签名的方法,void Method(object sender)我们将类型的对象A作为参数传递.会sender.GetType()返回类型A,还是object?为什么?

其他棘手的事情是,你可以做(A)obj,它会工作.现在CLR如何成为obj曾经的类型A

如果有人能比"C#通过CLR"更清楚地分解它,那将会很高兴.

更新.我的不好,应该在发布问题之前运行代码.所以,如果GetType()真的总是返回真实类型,那么所有其他问题也会变得清晰.

c#

6
推荐指数
1
解决办法
1473
查看次数

标签 统计

c# ×1