Minco
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
posts - 45, comments - 65, trackbacks - 1
<
2007年5月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(6)
给我留言
查看留言
我参与的团队
北京.NET俱乐部(1/1483)
广州.NET俱乐部(0/1726)
我的标签
默认按钮
(2)
搜索
(2)
转移焦点
(2)
杀毒
(1)
unlocker
(1)
linq
(1)
linq to sql
(1)
性能
(1)
PM
(1)
项目管理
(1)
更多
随笔分类
个人心情(3)
软件架构(1)
小小心得(40)
随笔档案
2008年7月 (1)
2008年5月 (1)
2008年4月 (5)
2008年1月 (3)
2007年12月 (1)
2007年11月 (1)
2007年9月 (1)
2007年8月 (4)
2007年6月 (2)
2007年5月 (1)
2007年4月 (2)
2007年3月 (3)
2007年1月 (1)
2006年12月 (1)
2006年10月 (1)
2006年9月 (2)
2006年8月 (1)
2006年6月 (1)
2006年5月 (1)
2006年4月 (1)
2006年3月 (4)
2006年2月 (3)
2005年11月 (1)
2005年9月 (1)
好文珍藏
最新评论
1. re: c#对象:先有鸡还是先有蛋?
@zhh007's Bolg
帅
--EicrSoft
2. re: Linq to sql 简单性能差异指引
误导群众!! 测试非常不科学,没有除去第一次连接数据库时间 1.禁用ObjectTrackingEnabled 我简单测试了下 大概是 7%左右!!...
--Density
3. re: 在form上设定了defaultbutton属性之后,切换提交按钮的解决办法
在window2003,ie7,vs2008,测试不通过,在TextBox按回车还是触发Button1的后台事件。
--突破自己
4. re: 使用c#批创建exchange用户
按照你的方法我找到homeMDB=*,这个是怎么会事啊
--1111
阅读排行榜
1. 软件架构师分类及能力归纳(2947)
2. 使用dottrace2.0进行性能分析简介(2670)
3. 基于MYOB Premier数据库互操作简介(1913)
4. asp.net上传大文件碰到问题 SlickUpload来解决 当前版本为2.5.2 应该是开源的(1502)
5. WatiN中给FreeTextBox控件赋值(1421)
评论排行榜
1. 软件架构师分类及能力归纳(16)
2. c#对象:先有鸡还是先有蛋?(7)
3. asp.net上传大文件碰到问题 SlickUpload来解决 当前版本为2.5.2 应该是开源的(7)
4. 基于MYOB Premier数据库互操作简介(6)
5. 使用dottrace2.0进行性能分析简介(5)
c#对象:先有鸡还是先有蛋?
碰巧看到
吕震宇
兄的文章
C#设计模式(1)
,中提到 先有鸡还是先有蛋 的代码
using
System;
class
Client
{
public
static
void
Main ()
{
Base b
=
new
Base();
Derived d
=
new
Derived();
b.d
=
d;
Console.WriteLine(b.d.m);
}
}
class
Base
{
public
int
n
=
9
;
public
Derived d;
}
class
Derived : Base
{
public
int
m
=
10
;
}
“Derived继承自Base,可以说没有Base就没有Derived,可Base里面有一个成员是Derived类型。到底是先有鸡还是先有蛋?这个程序可以正常编译执行并打印结果10。”
上面提到可以正常编译并能打印结果,是没错,不过这不能说明先有鸡还是先有蛋这个问题。先有鸡还是先有蛋是说是鸡先生蛋呢还是蛋生鸡。在上面的代码中Base类声明有一个Derrived类,在Base实例化时,也就是“生”的时候并没有把Derrived类也“生”出来,因此不能说明问题.
Base类声明有一个Derrived类,也就是Base类的实例有一个指向Derrived类的指针,这是个引用问题,而这个引用在Base类创建时为null。
看下面的代码:
using
System;
class
Client
{
public
static
void
Main ()
{
Base b
=
new
Base();
Derived d
=
new
Derived();
b.d
=
d;
Console.WriteLine(b.d.m);
}
}
class
Base
{
public
Base()
{
this
.d
=
new
Derived();
}
public
int
n
=
9
;
public
Derived d;
}
class
Derived : Base
{
public
Derived() :
base
()
{
}
public
int
m
=
10
;
}
在上面的代码中Base类声明有一个Derrived类,在Base实例化时,也就是“生”的时候把Derrived类也“生”出来,编译通过,运行的时候死循环!
我不知道有什么托管对象可以先在Object对象之前创建出来!
Object对象作为所有其他对象的根对象,自然Object对象先创建出来,也就是说先有Object再有其他派生对象。
posted on 2007-05-28 17:47
分享 共赢
阅读(633)
评论(7)
编辑
收藏
所属分类:
小小心得
Feedback
#1楼
2007-05-28 18:33 |
游荡人
咋一看代码貌似无限延伸,好比我看电视,电视里一人看电视,他看的电视里又有人看电视……小时候想到这个问题就害怕,闯鬼咯.
原因在于你第一个文件里的Base类只有默认构造函数,初始化reference成员变量为null,而第二个则实例化了,当实例化Derived的时候调用它的构造函数(你自己写的这个),而这个构造函数先构造基类……所以死循环.
你尝下Derived类里不写构造函数呢?
回复
引用
查看
#2楼
2007-05-28 19:00 |
游荡人
哦,C#模型里的非数值对象为引用,所以"包含"它的对象不包含它(的整体),而只存在一个引用.
请问是么?
才学C#,请指教.
回复
引用
查看
#3楼
2007-05-28 19:06 |
deerchao
@游荡人
准确地说,所有的类(class)的实例都是引用(分配在堆上),结构(struct)的实例分配在栈上(当然,类里包含的成员struct不算).
回复
引用
查看
#4楼
2007-05-28 20:54 |
ofei
@游荡人
不是很清除你说的意思
我的代码只是演示对象的初始化的先后问题
跟先有鸡还是先有蛋是类似的
CLR负责管理类的实例的分配和引用计数
类的实例在堆上分配之后会返回一个引用
回复
引用
查看
#5楼
2007-05-29 08:34 |
zhh007's Bolg
客户说先有鸡就是先有鸡,客户说先有蛋就是先有蛋!
回复
引用
查看
#6楼
2008-05-10 09:19 |
hackztx [未注册用户]
Base b = new Base();
执行
public Base()这个构造函数
{
this.d = new Derived();//实例化这个对象,这个对象又调用基类的构造函数。。。。然后反复这样。。。。自己琢磨,其实你要是看不大懂,可以单步调试
!
}
回复
引用
#7楼
2008-07-28 11:17 |
EicrSoft [未注册用户]
@zhh007's Bolg
帅
回复
引用
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
博客园首页
新闻频道
社区
小组
博问
网摘
闪存
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
成果网帮您增加网站收入
相关文章:
人死后真的有灵魂吗?
U盘软件大集中,有U盘的定要看!
先有鸡还是先有蛋?
先有鸡还是先有蛋?
automation服务器不能创建对象
C#下如何实现服务器+客户端的聊天程序
相关链接:
所属分类的其他文章:
扣出MSLinqToSQLGenerator的基类,可用于开发自定义工具(custom tool)
[转]我在微软做PM ...
Linq to sql 简单性能差异指引
April Rosario(vs2010?) CTP now available!
手工杀毒利器
在form上设定了defaultbutton属性之后,切换提交按钮的解决办法
在form上设定了defaultbutton属性之后,切换提交按钮的解决办法
使用System.Net.Mail发送邮件,vs2005与vs2008存在差别?
扩展下jscalendar,添加ShowCalendar方法
安装vs2008之后系统好像变慢了?
最新IT新闻:
JavaScript将成Silverlight的最大对手?
没有谷歌就活不下去的四个网站
Google 10周岁生日
祝Google 10周岁生日快乐
Google十年市值达1500亿美元 创造奇迹