《设计模式》书中提到的"C++ don't treat classes as first-class objects"是什么意思?

idiotzeng 2002-09-11 10:12:24
英文影印版120页(PROTOTYPE),中文版79页(原型):
“C++不将类作为一级对象的语言”
“像Smalltalk和Objective C……,类对象已经起到原型一样的作用了”
是什么意思?
还有没有别的语言在这方面和Smalltalk、Objective C一样:treat classes as first-class objects?
...全文
78 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
idiotzeng 2002-09-11
  • 打赏
  • 举报
回复
C#把源型视为对象?
qqchen79 2002-09-11
  • 打赏
  • 举报
回复
这里好像机械工业的《设计模式》翻译的很好啊!
C++在运行的时候已经基本没有类型信息了,比如说我给你一个void*,你不可能判断出它到底指向什么对象(RTTI几乎很少使用)。而且,在C++里面新建堆对象的唯一方法是new,new语句需要静态显式指定类型名称:
MyTest* pt = new MyTest(); //pt一定是MyTest对象
这样,就不可能在向客户隐藏类型实现的前提下由客户建立新的对象。所以Prototype这样的pattern在C++里特别有用。
MyTest* CreateNew(MyTest* pt) {
return pt ->Clone(); //pt可能是MyTest,或者它的某个子类
}

而在C#里面,由于对Reflection的支持,Type类实际起到了prototype的作用。只要有一个Type实例,即使对它表示的类型一无所知,你也可以通过Activator.CreateInstance来建立该类的实例,这就是为什么在C#这样的语言中prototype模式没有用武之地。
Type t = ...;
Object o = Activator.CreateInstance(t); //o是什么类型?
yarshray 2002-09-11
  • 打赏
  • 举报
回复
C++不把源型视为对象!
C#!!
lonk 2002-09-11
  • 打赏
  • 举报
回复
还没看到咔咔
This benefit applies primarily to languages like c++ that don't
treat classes as first-class objects...
啊,意思会不会是,在smalltalk里面把类原型也看成对象,而c++里不是?

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧