当前位置:  -> 首页 -> 开发经验 -> C# Developer Center:常见问题

上一篇 | 下一篇
C# Developer Center:常见问题
作者:洛羽叶  点击率:1317  发布时间:2006-07-27

C# 工作组以及 C# 社区的成员正在通过 Web 日志 (blog) 回答常见问题 (FAQ),网址为:http://blogs.msdn.com/csharpfaq。该站点中的所有条目将通过本页面显示到 MSDN,中间仅因缓存会带来短暂的延迟。

您有什么问题吗?请通过网络日志页中的联系人选项向该工作组提出问题。

*
本页内容
FAQ 条目(按类别排列)FAQ 条目(按类别排列)
最新条目最新条目
什么时候应该使用 ==?什么时候应该使用 Equals?什么时候应该使用 ==?什么时候应该使用 Equals?
我应该将 null 赋给局部变量吗?我应该将 null 赋给局部变量吗?
在调用委托之前,为什么需要执行 null 测试?在调用委托之前,为什么需要执行 null 测试?

FAQ 条目(按类别排列)

一般

C# 语言和编译器

调试器/调试

IDE

Visual Basic 和 C# 等效条目

最新条目

为什么引用类型不是多态类型?

问:为什么引用类型不是多态类型?

答:请考虑以下代码:

using System;class Dog {   public string Name;}class Test{   public static void Swap(ref object a, ref object b) {      object temp;      temp = a;      a = b;      b = temp;   }   public static void Main() {      Dog d1 = new Dog();      d1.Name = "fido";      Dog d2 = new Dog();      d2.Name = "rex";      Swap(ref d1, ref d2);   }}

编译器将对 Swap() 函数调用时报告错误。为什么?请考虑 Swap 函数采用以下形式的情况:

public static void Swap(ref object a, ref object b) {      a = 5;      b = “Hello“;   }

如果编译器允许使用上述代码,这将意味着将装箱的 int 类型值赋给 Dog 对象,这显然不是类型安全的。

[作者:Eric Gunnerson]

发布时间:2004 4 8 14:55:00 GMT 星期四    评论(11)

什么时候应该使用 ==?什么时候应该使用 Equals?

Equals 方法只是在 System.Object 中定义的一个虚拟方法,它由任何选择执行该任务的类所重写。== 运算符是一个可由类重载的运算符,该类通常具有恒等行为。

对于未重载 == 的引用类型,该运算符会比较两个引用类型是否引用同一对象,而这恰好是 System.Object 中的 Equals 实现所做的工作。

对于未重载 == 的值类型,该运算符会比较这两个值是否"按位"相等,即是否这两个值中的每个字段都相等。当您对值类型调用 Equals 时,仍然会发生这一情况,但这一次,该实现是由 ValueType 提供的,并且使用反射进行比较,从而使比较速度比特定于类型的实现慢很多。

到此为止,二者是如此类似。二者之间的主要区别是多态。运算符被重载而不是被重写,这意味着除非编译器知道调用更为具体的版本,否则它只是调用恒等版本。为阐明这一点,请看下面这个示例:

using System;public class Test{static void Main(){        // Create two equal but distinct strings        string a = new string(new char[] {
标签: C#
引用地址:http://www.google.com
   站点首页      技术人生      旅途足迹      我要留言      友情链接      关于站长   
[本站统计]
在线人数:10
今日访问:571
总访问量:1936402
Copyright 2006-2022 EasyWeb 1.6 订阅 All Rights Reserved
粤ICP备08028977号-1
www.luoriver.com
Created by WWH in 2006