问题描述
如图,这样为什么IDE还是不能认为yourClass就是myCalss类型的数据呢这样写感觉也没有什么差别(以前一直都这么写,今天想偷个懒发现居然不行了)操作上看好像也就是最放的地方不一样。2者差距在什么地方呢
解决方案
解决方案二:
第一个你的yourClass类型是object,不是myClass,虽然你将yourClass强转成了myClass,但最终赋给的还是object
解决方案三:
本帖最后由 bdmh 于 2015-06-18 16:19:38 编辑
解决方案四:
同上varTemp=(MyClass)YourClass;会被编译器编译成MyClassTemp=(MyClass)YourClass;这你就该知道有啥区别了吧
解决方案五:
引用2楼bdmh的回复:
第一个yourClass就是object类型,ide不知道你给他搞到哪个具体类了,所以无法识别具体类型,第二个是var语法,会推断类型参考msdn
var的含义是明白的,搞不清的是myclsdd=(myClass)yourClass不是告诉IDE让他把myclsdd识别为myClass类型么
解决方案六:
引用4楼lulianqi的回复:
var的含义是明白的,搞不清的是myclsdd=(myClass)yourClass不是告诉IDE让他把myclsdd识别为myClass类型么
no,no,no只是告诉IDE将yourClass先转换成myClass类型,再赋值给myclsddmyclsdd原来是什么类型,还是什么类型它的类型是不会变的
解决方案七:
你应该知道objecto=1;inti=2;o=i;语法是成立的,可以隐式转换,因为object是所有类型的基类(也就是父类)那么换一种写法上面已经把i赋值给o了,o里面存放的是个int类型,所以可以再强制转换回int类型objecto2=(int)o;这也是可以的但是你以为o2就变成int类型了吗
解决方案八:
上面举例是用的值类型你换成引用类型其实是一样的道理
解决方案九:
在这个引用类型的变量入账入栈时就是传人的参数被ldarg的时候他的地址就被赋值给yourClass在入栈赋值的时候就决定了yourClass就是object类型,他的地址/引用可以随我们改变,不过变量的类型是无法改变的yourClass=(myClass)yourClass;实际上是yourClass=(object)((myClass)yourClass);也就是说C#里一个变量被定义出来类型是不可能发生改变的是不是这样理解的还有个问题想请教下如果yourClass就是一个指针变量,那是不是在C里面一个指针的类型也是不能改变的,只能改变指针的地址。也要跟C#一样xiang引用6楼Z65443344的回复:
你应该知道objecto=1;inti=2;o=i;语法是成立的,可以隐式转换,因为object是所有类型的基类(也就是父类)那么换一种写法上面已经把i赋值给o了,o里面存放的是个int类型,所以可以再强制转换回int类型objecto2=(int)o;这也是可以的但是你以为o2就变成int类型了吗
刚刚想了下好像想明白了在这个引用类型的变量入账入栈时就是传人的参数被ldarg的时候他的地址就被赋值给yourClass在入栈赋值的时候就决定了yourClass就是object类型,他的地址/引用可以随我们改变,不过变量的类型是无法改变的yourClass=(myClass)yourClass;实际上是yourClass=(object)((myClass)yourClass);也就是说C#里一个变量被定义出来类型是不可能发生改变的是不是这样理解的还有个问题想请教下如果yourClass就是一个指针变量,那是不是在C里面一个指针的类型也是不能改变的,只能改变指针的地址。也要跟C#一样先定义一个目标类型的指针在把指针地址赋过去。