社区
C#
帖子详情
Class具有MethodTable,那么Struct有没有呢?
树莓派
2010-05-26 12:55:32
如题
...全文
227
13
打赏
收藏
Class具有MethodTable,那么Struct有没有呢?
如题
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
悔说话的哑巴
2010-05-27
打赏
举报
回复
这个基本的概念就没有绝对的定义
softman11
2010-05-27
打赏
举报
回复
[Quote=引用 11 楼 visualbasic2000 的回复:]
引用 10 楼 softman11 的回复:
引用 5 楼 visualbasic2000 的回复:
引用 3 楼 softman11 的回复:
引用楼主 visualbasic2000 的回复:
如题
.net里面的struct实现机制和Class是一样的,只是传送的一个是按值一个是按引用传递。
因此struct里面自然有mothodtable
你的意思是Str……
[/Quote]
是不是类我认为只是一种说法,本质还是看内部实现机制。
结构如果通过new分配的话,行为和类是完全一样的,是可以用反射获得相关信息的。
但是如果不是用new分配的话,是不可以用反射的。
因此我认为内部实现机制确实是内机制。
这个只有问微软实现这个人才知道真实答案,如果你有相关资料,贴出来,我也看哈。
至于其他那些书中所说,不可全信。
树莓派
2010-05-26
打赏
举报
回复
[Quote=引用 10 楼 softman11 的回复:]
引用 5 楼 visualbasic2000 的回复:
引用 3 楼 softman11 的回复:
引用楼主 visualbasic2000 的回复:
如题
.net里面的struct实现机制和Class是一样的,只是传送的一个是按值一个是按引用传递。
因此struct里面自然有mothodtable
你的意思是Struct的TypeHandler也是放在线程栈上面的……
[/Quote]
据我看到的资料是New的Struct也不是类,实例化时,class要使用new关键字;而struct可以不使用new关键字,如果不以new来实例化struct,则其所有的字段将处于未分配状态,直到所有字段完成初始化,否则引用未赋值的字段会导致编译错误。
谢谢您的讨论。。。。。
softman11
2010-05-26
打赏
举报
回复
[Quote=引用 5 楼 visualbasic2000 的回复:]
引用 3 楼 softman11 的回复:
引用楼主 visualbasic2000 的回复:
如题
.net里面的struct实现机制和Class是一样的,只是传送的一个是按值一个是按引用传递。
因此struct里面自然有mothodtable
你的意思是Struct的TypeHandler也是放在线程栈上面的,然后指向该类型的Struct的放在Load堆上的Metho……
[/Quote]
struct是在堆栈上分配,CLASS是在堆上分配。
你如果说的mothdtable是指Vtab,那么struct自然没有。因为struct不支持虚函数,自然不需要vtab
但是这个也不是一成不变的吧。结构变量也可以通过new 来分配。
通过new分配的结构实际上就是一个类。自然也有函数表了,可以通过反射来证明了
所以如果你说的methodtable是指函数表,那么我想一定是有的,否则怎么实现访问呢?
不过这都是我的推理。不权威哈。呵呵。
abeniaj0427
2010-05-26
打赏
举报
回复
msdn说结构和类:
http://msdn.microsoft.com/zh-cn/library/2hkbth2a%28VS.80%29.aspx
msdn说对象、类和结构
http://msdn.microsoft.com/zh-cn/library/ms173109%28VS.80%29.aspx
树莓派
2010-05-26
打赏
举报
回复
C#中,放入继承的虚方法,引入的虚方法,实方法,静态方法,组成一个方法链
兔子-顾问
2010-05-26
打赏
举报
回复
我只知道虚函数表。不知道函数表。
c++下的知识,所有的类成员函数(c#下叫方法)都是静态的,不同的是,非静态方法,默认有一个this参数。
struct不支持多态,所以不需要虚函数表,每个struct的方法都是固定的。
class可以使用virtual,abstract关键字,创建虚函数,虚函数的实现就是依赖虚函数表,如果没有虚函数,就不需要函数表,我是这样理解的。可能.net下别名不同。应该就是virtual methods table的意思。
树莓派
2010-05-26
打赏
举报
回复
mothodtable只能放虚方法吗?其他方法放在什么地方呢?
树莓派
2010-05-26
打赏
举报
回复
[Quote=引用 3 楼 softman11 的回复:]
引用楼主 visualbasic2000 的回复:
如题
.net里面的struct实现机制和Class是一样的,只是传送的一个是按值一个是按引用传递。
因此struct里面自然有mothodtable
[/Quote]
你的意思是Struct的TypeHandler也是放在线程栈上面的,然后指向该类型的Struct的放在Load堆上的MethodTable?
有没有资料,还是想象的?
树莓派
2010-05-26
打赏
举报
回复
有没有高手从CLR的角度上解释一下。
不是不知道Class和Structure的区别,是想知道内部方法管理机制。谢谢。
softman11
2010-05-26
打赏
举报
回复
[Quote=引用楼主 visualbasic2000 的回复:]
如题
[/Quote]
.net里面的struct实现机制和Class是一样的,只是传送的一个是按值一个是按引用传递。
因此struct里面自然有mothodtable
兔子-顾问
2010-05-26
打赏
举报
回复
只有类才可以实现多态,多态的实现是靠这个虚函数表实现的。struct不存在虚函数。所以没有虚函数表。
http://www.cnblogs.com/lbq1221119/archive/2008/03/14/1106428.html
这里有个介绍。不是很贴切,但是能说明原理。
wuyq11
2010-05-26
打赏
举报
回复
class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数
interface IPerson
{
void GetSex();
}
struct Family: IPerson
{
public string name;
//不可以包含显式的无参构造函数和析构函数
public Family(string name)
{
this.name = name;
}
//不可以实现protected、virtual、sealed和override成员
public void GetSex()
{
}
public void ShowPerson()
{
}
//可以重载ToString虚方法
public override string ToString()
{
return String.Format("{0}", person.Name);
}
}
C#
Struct
的内存布局
转载:http://www.csharpwin.com/csharpspace/10454r4891.shtml 问题:请说出以下
struct
的实例大小以及内存布局
struct
Struct
1 { public byte a; public short b; public string c; public int d; } ...
Struct
的内存布局
今天雨痕老大在群里出了一个关于
struct
内存布局的基础问题,大家热烈讨论。晚上又和老大聊了一下发现自己的理解也有些模糊,因此在这里略作记述和大家共享。希望您能够亲自动手实验,并欢迎指正本文的错误。问题:请...
.Net 7 内存模型函数描述结构
MethoD
esc
楔子从今天开始,讲一些CLR里面的内存模型。...
Method
Desc结构这个结构体在CLR里面高达1600多行,这里仅截取一些
class
Method
Desc { friend
class
EE
Class
; friend
class
Method
Table
Builder; friend cla...
Object内存核心结构及实现完全剖析(
Method
Table
、EE
Class
与
Method
DescChunk)
static
Method
Table
* AllocateNewMT(EE
Class
*p
Class
, DWORD dwV
table
Slots, DWORD dwGCSize, DWORD dwNumInterfaces, DWORD numGenericArgs, DWORD dwNumDicts, DWORD ...
.net 高级调试学习(2)对象查看
调试的程序源代码如下: using System; using System.Text; namespace Advanced.NET.Debugging.Chapter3 ... public
class
ObjTypes { public
struct
Coordinate { public in...
C#
111,094
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章