[C# 基础知识系列]C#中易混淆的知识点
2013-08-12 19:43
337 查看
一、引言
今天在论坛中看到一位朋友提出这样的一个问题,问题大致(问题的链接为:http://social.msdn.microsoft.com/Forums/zh-CN/52e6c11f-ad28-4633-a434-fc4d09f4d23d )是这样的:static void Main(string[] args) { object m1 =1 ; object m2 = 1; Console.WriteLine(m1==m2); Console.WriteLine(m1.Equals(m2)); Console.Read(); }
大家先不要去Visual Studio中运行这段代码,先猜猜此段代码的运行结果是怎样的,如果你猜测的结果和运行出来的结果完全是一致并且你也知道原因的话,那这篇文章下面的内容就没必要看下去了,如果你对运行出来的结果表示不理解的话,那请继续看下面内容的分析,相信看完你绝对可以解除你的疑惑。
二、==与Equals的区别
上面问题的运行结果为:static void Main(string[] args) { string str1 = "ZhangSan"; string str2 = "ZhangSan"; string str3 = new string(new char[] { 'z', 'h' }); string str4 = new string(new char[] { 'z', 'h'}); Console.WriteLine("str1 == str2 " + (str1 == str2).ToString()); Console.WriteLine("str1 Equals str2 " + str1.Equals(str2)); Console.WriteLine("str3 == str4 " + (str3 == str4).ToString()); Console.WriteLine("str3 Equals str4 " + str3.Equals(str4)); Console.Read(); }
View Code
运行结果为:
三、typeof与GetType区别
从上面那个问题中,我又联系到了typeof与GetType的区别,所以这里就一起总结下,首先我还是由一个程序来引出它们的区别:static void Main(string[] args) { object m1 = 1; object m2 = 1; // ValueType是引用类型,因为它是类,所以返回为false Console.WriteLine(typeof(ValueType).IsValueType); Console.WriteLine(m1.GetType().IsValueType); Console.Read(); }
要想弄明白上面的运行结果,首先我们应该理解typeof与GetType的区别(之前我认为两个的都是一样的,这是一个误区),具体的区别为:
typeof 是运算符,而 GetType() 是方法
typeof 获得类型的System.Type对象,GetType()获得当前实例的Type,
GetType()是基类System.Object的方法,只有建立了一个实例之后才能够被调用
typeof的参数只能是int, string, class,自定义类型,不能为具体实例,否则编译器会报错
知道它们的区别之后,结果也就很容易得到了,上面程序的运行结果为:
四、小结
这篇文章主要是记录下自己在回答问题时所学到的内容,也希望对有同样疑惑的朋友有所帮助。相关文章推荐
- [C# 基础知识系列]C#中易混淆的知识点
- [C# 基础知识系列]专题一:深入解析委托——C#中为什么要引入委托
- 【转】[C# 基础知识系列]专题八:深入理解泛型(二)
- C# 基础知识系列之面向对象基础
- C#基础知识梳理系列四:C#类成员:方法
- .NET面试题系列[4] - C# 基础知识(2)
- 【转】[C# 基础知识系列]专题九 :深入理解泛型可变性
- C#基础知识梳理系列十:异常处理 System.Exception
- [C# 基础知识系列]专题三:如何用委托包装多个方法——委托链
- [C# 基础知识系列] 专题十五:全面解析扩展方法
- C#基础知识梳理系列十五:反射
- [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情
- [C# 基础知识系列]专题十六:Linq介绍
- C#基础系列问题三委托知识总结2
- [C#基础知识系列]专题十:全面解析可空类型
- C#基础知识系列六(静态类和静态类成员)
- C#基础知识梳理系列五:委托与事件
- .NET面试题系列[3] - C# 基础知识(1)
- C#基础知识梳理系列三:C#类成员:常量、字段、属性
- .NET面试题系列[3] - C# 基础知识(1)