考考你的FrameWork的基础!

wumylove1234 2005-07-18 09:59:38
static void Main(string[] args)
{
System.Collections.ArrayList a=new System.Collections.ArrayList();
System.Collections.ArrayList b=new System.Collections.ArrayList();
if(Object.Equals(a.GetType(),b.GetType()))
Console.WriteLine("TRUE");
else
Console.WriteLine("FALSE");
}

不要上机调试,大家认为上面的代码输出的结果是True还是False,且说明为什么会输出这样的结果.
...全文
666 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jim3 2005-07-18
  • 打赏
  • 举报
回复
每个类型一个实例保存在一个列表中,所以gettype()返回的是同一个对象

《.Net框架程序设计》里有关于这方面的描述
vrace 2005-07-18
  • 打赏
  • 举报
回复
当然是 true
type 是一样的

估计获取 type 用的是 reflection 吧
longdong1999 2005-07-18
  • 打赏
  • 举报
回复
向高手學習,看來對framework了解的還是太少啊
wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
的确a.GetType()与b.GetType()确实是得到同一个实例,我用Object.ReferenceEquals(a.GetType(),b.GetType()),这段代码应该可以检验得出来.

Jim3:
能给我讲一下,为什么会得到同一个实例呢?实现的过程是怎么样的?我是指从CLR或者编译器的角度.
wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
// 代码大小 54 (0x36)
.maxstack 2
.locals init ([0] class [mscorlib]System.Collections.ArrayList a,
[1] class [mscorlib]System.Collections.ArrayList b)
IL_0000: newobj instance void [mscorlib]System.Collections.ArrayList::.ctor()
IL_0005: stloc.0
IL_0006: newobj instance void [mscorlib]System.Collections.ArrayList::.ctor()
IL_000b: stloc.1
IL_000c: ldloc.0
IL_000d: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_0012: ldloc.1
IL_0013: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_0018: call bool [mscorlib]System.Object::Equals(object,
object)
IL_001d: brfalse.s IL_002b
IL_001f: ldstr "TRUE"
IL_0024: call void [mscorlib]System.Console::WriteLine(string)
IL_0029: br.s IL_0035
IL_002b: ldstr "FALSE"
IL_0030: call void [mscorlib]System.Console::WriteLine(string)
IL_0035: ret
} // end of method Class1::Main

我对IL还不会,请大侠看看IL代码,似呼应该能找到答案吧?
wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
Jim3:
为什么实例只有一个?a.gettype()和b.gettype()只产生一个type实例吗?

ms44:
Equals的确是比较引用.
引用是指什么?我理解是堆内存中对对象的引用.那除非a.gettype()和b.gettype()产生同一个type对象,这样对同一个引用那将是相等的.
书上说:object.Equals(object A,object B)同部的实现过程是:
if (A==B)
return true;
else
return false;
就是比较引用.
你所说的类型一样?我不太理解.你是说A和B产生的类型都是Type类的实例就会相等吗?那如果Object.Equals(a,b),结会是会是假的,a和b的类型不同吗?似呼和类型是没有关系的,还是要说到引用上.
广州接入 2005-07-18
  • 打赏
  • 举报
回复
如果 objA 是与 objB 相同的实例,或者如果两者均为空引用,或者如果 objA.Equals(objB) 返回 true,则为 true;否则为 false。

备注
Equals 的默认实现仅支持引用相等,但派生类可重写此方法以支持值相等。

对于引用类型,相等定义为对象相等;即这些引用是否引用同一对象。对于值类型,相等定义为按位相等。ValueType 类支持值类型。

在调用 objA.Equals(objB) 前,此方法首先检查两个参数是否均为空引用
初心2 2005-07-18
  • 打赏
  • 举报
回复
true
ms44 2005-07-18
  • 打赏
  • 举报
回复
EQUAL比较引用。
类型一样,自然是true;
Jim3 2005-07-18
  • 打赏
  • 举报
回复
true

这是因为类型的实例只有一个

gdyaojie 2005-07-18
  • 打赏
  • 举报
回复
结果一样,都是ArrayList
wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
欢迎继续回答问题.
还有,楼上的作答是错误的.
请严谨考虑.
slql 2005-07-18
  • 打赏
  • 举报
回复
false 对应的值不同
wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
顶!
w1231313131 2005-07-18
  • 打赏
  • 举报
回复
csdn 里面原来有 http://blog.csdn.net/Ninth/category/39069.aspx
wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
回复人: tiaoci(我挑刺,我快乐) ( ) 信誉:95 2005-07-18 17:12:00 得分: 0
同一个对象,因为CTS对GetType使用了Cache
//////////////////////////////////////////////////////////////
不知道别人还有无异议了,呵,只有这个解释差不多才算是合理的.

//////////////////////////////////////////////////////////////
回复人: w1231313131(lllllkk) ( ) 信誉:100 2005-07-18 17:24:00 得分: 0
《.Net框架程序设计》 网上有的载吗
///////////////////////////////////////////////////////////////
有,不过我找到的都是英文版,中文的没有.

w1231313131 2005-07-18
  • 打赏
  • 举报
回复
《.Net框架程序设计》 网上有的载吗
tiaoci 2005-07-18
  • 打赏
  • 举报
回复
同一个对象,因为CTS对GetType使用了Cache
wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
回复人: WZCNet(只有想不到,没有做不到) ( ) 信誉:100 2005-7-18 13:47:17 得分: 0
True.
Object.Equals 方法 确定两个 Object 实例是否相等。
因为A与B对象是完全相等的。

//////////////////////////////////////////////////////////////////
我感觉你的理解也不是很透彻,说法上有些含糊不清,你怎么能判断两个对象是完全相等的?除非你重写Equals才能确定对象的字符,属性是不是完全一样的.而Object.Equals是确定两个引用是否指向同一个对象.

wumylove1234 2005-07-18
  • 打赏
  • 举报
回复
回复人: Dr_Jones(kickyourass) ( ) 信誉:100 2005-07-18 14:42:00 得分: 0


同意ms44(ms44)


他的讲述不清楚.说是比较引用,怎么又说类型相同就应该为True.至少应该说引用相同,所以为True.
加载更多回复(4)

110,532

社区成员

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

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

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