从内存分配角度看类型转换
以前看过c++,对类型转换都是从内存分配的角度理解的。
开始c#也从内存分配理解的,但越搞越接近IL,接近c#编译原理,限于知识有限,归纳不出它的转换规则(才知道c++当时也学的是一知半解)。查过些书,但都没有全面的讲解的。感觉走进了误区。退而求其次,不要求从内存分配上求知,只希望给出使用级别上,c#的转化规则,要全面的。
还有类型转换与类型兼容之间的关系,is和 as关键字的用法 (“兼容”就是对象是该类型或者是派生于该类型,这种表象 简单的回答,也就不用回答了)
还有拆箱和装箱中类型的转换
个人认为,以上涉及的类型转换等问题 其本质上都是一样的 或者说是同一个问题
我也查了很多书,只是简单的说什么 派生类隐式的转化为派生类之类的,就免于留言吧!
高手可以回答下 表面的类型转换在底层内存上的变化机制
为了便于回答,下面是书上的例子,有真知灼见的哥们可以参考着回答下。
class B
{
}
class D:B
{
}
static void Main(string[] args)
{
OK 不能通过编译 执行异常
object o1 = new object(); *
object o2 = new B(); *
object o3 = new D(); *
object o4 = o3; *
B b1 = new B(); *
B b2 = new D(); *
D d1 = new D(); *
B b3 = new object(); *
D d2 = new object(); *
B b4 = d1; *
D d3 = b2; *
D d4 = (D)d1; *
D d5 = (D)b2; *
D d6 = (D)b1; *
B b5 = (B)o1; *
B b6 = (D)b2; *
}
这个问题烦了我很多天了,希望大家能给出全面的讲解,或在什么地方有类似详细全面的理解!!!
初涉.NET不久,这块知识点周围同学都觉得理所当然,没什么问题。可我偏偏过不去这个坎,他们又解答不了我的问题。应该是c++留下来的毛病,过分关注内存。但我总得在一定层面上要理解后识记住他的用法啊,不想死记硬背。
拍拖了,小弟不甚感激!