社区
C#
帖子详情
类型转换的问题
loachqz
2009-10-29 03:47:17
请问,如果知道了某个类型的FullName,如何将object类型转成该指定类型!?
...全文
220
45
打赏
收藏
类型转换的问题
请问,如果知道了某个类型的FullName,如何将object类型转成该指定类型!?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
45 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ProjectDD
2009-10-30
打赏
举报
回复
//X x;
x.GetType().FullName;
object o=(object)x;
var v=o as X;
cc_net
2009-10-29
打赏
举报
回复
[Quote=引用 42 楼 wanghui0380 的回复:]
引用 39 楼 cc_net 的回复:
引用 38 楼 wanghui0380 的回复:
引用 36 楼 cc_net 的回复:
Control con=new Form(); 在堆上的对象指向的类型对象还是Form,只是栈上的易用类型是Control
Form frm=(Form)con; 实际堆上的对象指向的类型对象还是Form,只是引用变了
这还真不知道改怎么说。
这个只能叫成员方法表的转换,实际上对象还是对象,换了一个马甲而已(嘿嘿,穿了马甲是赵本山,把马甲脱了还是赵本山)
一个对象在初始化的时候,他的方法表地址就已经确定了。对于非虚方法,是根据栈上的变量类型来调用方法,所以它调用的方法的地址也是编译时就确定了。而和堆上运行时的实际类型无关,所以说成员方法表的转换不妥。
这位老兄还是先看看《你必须知道的net》把,知道new的时候都发生了什么事吗??如果编译的时候就确定了,new的时候还需要层层冒泡去在内存分配父类的成员方法表吗???
按你的说法,编译的时候就确定了,难道你心里想的就像博客园那位“吉日”兄一样,认为程序运行前,系统会把所有的对象类型的方法表一口气载入内存,明显不是如此的,方法表虽然在编译的时候被固定的结构,但是他实际是临时动态滴加载到内存里的
好了不说了,再说就和lz这个帖子偏题太远了
ps:提示lz一下,并不需要你去写太多if else, 你所要做的事情微软已经做了Convert.ChangeType方法就是,他提供了net里默认的常用类型的互译。按你的需求来看,实际这些常用过程就够用了
[/Quote]
不好意思,是我说的不清楚,我说的编译是指JIT编译。不是编译成IL代码的时候。
# 0000003c mov ecx,esi
# 0000003e cmp dword ptr [ecx],ecx
# 00000040 call FFB2C050
# 00000045 nop
这篇文章挺不错,看过多次,推荐,深入探索.NET框架内部了解CLR如何创建运行时对象:http://www.microsoft.com/china/MSDN/library/netFramework/netframework/JITCompiler.mspx?mfr=true
怫悰
2009-10-29
打赏
举报
回复
本来就存在显式和隐式转换吧?不过还是要确定能否转成功吆
wanghui0380
2009-10-29
打赏
举报
回复
[Quote=引用 39 楼 cc_net 的回复:]
引用 38 楼 wanghui0380 的回复:
引用 36 楼 cc_net 的回复:
Control con=new Form(); 在堆上的对象指向的类型对象还是Form,只是栈上的易用类型是Control
Form frm=(Form)con; 实际堆上的对象指向的类型对象还是Form,只是引用变了
这还真不知道改怎么说。
这个只能叫成员方法表的转换,实际上对象还是对象,换了一个马甲而已(嘿嘿,穿了马甲是赵本山,把马甲脱了还是赵本山)
一个对象在初始化的时候,他的方法表地址就已经确定了。对于非虚方法,是根据栈上的变量类型来调用方法,所以它调用的方法的地址也是编译时就确定了。而和堆上运行时的实际类型无关,所以说成员方法表的转换不妥。
[/Quote]
这位老兄还是先看看《你必须知道的net》把,知道new的时候都发生了什么事吗??如果编译的时候就确定了,new的时候还需要层层冒泡去在内存分配父类的成员方法表吗???
按你的说法,编译的时候就确定了,难道你心里想的就像博客园那位“吉日”兄一样,认为程序运行前,系统会把所有的对象类型的方法表一口气载入内存,明显不是如此的,方法表虽然在编译的时候被固定的结构,但是他实际是临时动态滴加载到内存里的
好了不说了,再说就和lz这个帖子偏题太远了
ps:提示lz一下,并不需要你去写太多if else, 你所要做的事情微软已经做了Convert.ChangeType方法就是,他提供了net里默认的常用类型的互译。按你的需求来看,实际这些常用过程就够用了
conan19771130
2009-10-29
打赏
举报
回复
mark
zhanlang9075
2009-10-29
打赏
举报
回复
关键是要把等号右边的类型 转换为可以与左边类型匹配的数据类型 是这样的程序思路么
cc_net
2009-10-29
打赏
举报
回复
[Quote=引用 38 楼 wanghui0380 的回复:]
引用 36 楼 cc_net 的回复:
Control con=new Form(); 在堆上的对象指向的类型对象还是Form,只是栈上的易用类型是Control
Form frm=(Form)con; 实际堆上的对象指向的类型对象还是Form,只是引用变了
这还真不知道改怎么说。
这个只能叫成员方法表的转换,实际上对象还是对象,换了一个马甲而已(嘿嘿,穿了马甲是赵本山,把马甲脱了还是赵本山)
[/Quote]
一个对象在初始化的时候,他的方法表地址就已经确定了。对于非虚方法,是根据栈上的变量类型来调用方法,所以它调用的方法的地址也是编译时就确定了。而和堆上运行时的实际类型无关,所以说成员方法表的转换不妥。
wanghui0380
2009-10-29
打赏
举报
回复
[Quote=引用 36 楼 cc_net 的回复:]
Control con=new Form(); 在堆上的对象指向的类型对象还是Form,只是栈上的易用类型是Control
Form frm=(Form)con; 实际堆上的对象指向的类型对象还是Form,只是引用变了
这还真不知道改怎么说。
[/Quote]
这个只能叫成员方法表的转换,实际上对象还是对象,换了一个马甲而已(嘿嘿,穿了马甲是赵本山,把马甲脱了还是赵本山)
cc_net
2009-10-29
打赏
举报
回复
我觉得应该是类型转换,因为在初始化时,堆上对象的类型已经就确定。这个是不能改的。
cc_net
2009-10-29
打赏
举报
回复
Control con=new Form(); 在堆上的对象指向的类型对象还是Form,只是栈上的易用类型是Control
Form frm=(Form)con; 实际堆上的对象指向的类型对象还是Form,只是引用变了
这还真不知道改怎么说。
loachqz
2009-10-29
打赏
举报
回复
。。。。谢谢大家。只能用最原始的方法了。类型不是很多,就直接if判断吧
CsToD
2009-10-29
打赏
举报
回复
[Quote=引用 26 楼 viena 的回复:]
21楼,就算不是拆箱,但你说的类型转换也不对
对象实际类型没有发生变化,只不过从object引用,改为了其本身类型的引用
何来类型转换?
[/Quote]
Control con=new Form();
Form frm=(Form)con;
在你看来,这不是类型转换?
对象虽然没转换,但是引用发生了变化,这在你看来不叫转换?
viena
2009-10-29
打赏
举报
回复
你这样转换的话,可能不会报错,但是可能取到的值是错的~
loachqz
2009-10-29
打赏
举报
回复
我试试wanghui0380的提议。自己写转换方法去调用。。再不行,貌似就通过已知类型判断写。。
本人特别不喜欢if或者switch。。呵呵~
loachqz
2009-10-29
打赏
举报
回复
我试试wanghui0380的提议。自己写转换方法去调用。。再不行,貌似就通过已知类型判断写。。
本人特别不喜欢if或者switch。。呵呵~
viena
2009-10-29
打赏
举报
回复
我认为只能分已知类型一一判断,
如果并非所有类型都可以统一转换的,强制转换的话,
可能会有驴唇不对马嘴的结果,以后出了错你都不知道是哪出的~
loachqz
2009-10-29
打赏
举报
回复
bjtiantian哥哥。。反射我也会。问题我不是要调方法。。。。辛苦你了
wanghui0380
2009-10-29
打赏
举报
回复
问法稍微有点问题,is关系才能说类型转换
非is关系只能叫convert(转变,实际我愿意把他叫做,翻译)
请自己参阅Convert.ChangeType() 方法,当然这个方法实现了大部分默认类型的互译
如果有非支持的转换其会报异常,对于这种你就必须用 Convert<Tinput,Toutput>或者fun<T,Tresult>
自己提供转换支持了
viena
2009-10-29
打赏
举报
回复
另: 我早已不是版主了
viena
2009-10-29
打赏
举报
回复
21楼,就算不是拆箱,但你说的类型转换也不对
对象实际类型没有发生变化,只不过从object引用,改为了其本身类型的引用
何来类型转换?
加载更多回复(25)
提高C#编程水平的50个要点
- **解释**:`as`操作符尝试将表达式转换为指定的类型,如果转换失败,则返回null,而强制
类型转换
会抛出异常。 - **实践建议**:使用`as`操作符进行
类型转换
可以避免运行时出现异常。 #### 4. 使用条件属性...
腾讯2012笔试题目
类型转换
** 题目描述了一个基类指针和一个派生类指针之间的转换过程。这里涉及到C++中的类型安全转换。 - **选项分析:** - A: 使用`static_cast`从派生类指针转换到基类指针是安全的。 - B: 首先使用`static_...
Gson 2.3.1
5. **
类型转换
**: Gson提供了一些高级特性,如`TypeToken`,用于处理不确定类型的泛型。`GsonBuilder`则允许自定义序列化和反序列化的配置,比如日期格式、字段忽略等。 6. **流式API**: Gson 2.3.1中还包含流式API...
LitJson.dll
例如,你可以使用`JsonMapper.ToObject(string json)`方法将一个JSON字符串转换为指定类型的.NET对象,而`JsonMapper.ToJson(object obj)`则可以将一个.NET对象转换为JSON字符串。这里的`T`代表你想要反序列化的.NET...
jackson-core-asl-1.9.13+jackson-mapper-asl-1.9.13札包
除了基本的功能外,Jackson库还有许多高级特性,如
类型转换
、类型安全的泛型处理、处理日期和时间的模块、以及对XML和CSV的支持等。在实际开发中,根据具体需求,可以结合使用这些特性来优化JSON操作的效率和灵活性...
C#
111,119
社区成员
642,555
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章