首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

说说重写ToString()方法和Equals()方法

作者:  时间: 2010-11-09

 

class Shape
{
private string input;

public string Input
{
get { return input; }
set { input = (string.IsNullOrEmpty(value) ? "No" : value); }
}

private string sex;

public string Sex
{
get { return sex; }
set { sex = (string.IsNullOrEmpty(value) ? "" : value); }
}

public override string ToString()
{
return string.Format("Hello {0} You Sex is {1}", input,sex);
}

}

因为每个类如果不设置继承的父类都会默认继承System.Object类所以直接 override tostring()方法 就可以重写 tostring() 了 是不是很简单呢  接下来我们再来说说 重写Equals()方法 这个方法是用来比对2个值是不是同一个对象的 首先我们来看看 下面这段代码

 

static void Main(string[] args)
{
Shape sp
= new Shape();
sp.Input
= "Man";
sp.Sex
="";
Console.WriteLine(sp.ToString());

Shape sp2
= sp;
sp2.Sex
= "";
Console.WriteLine( sp2.Equals(sp));
}

这段代码 首先会输出 Hello Man You Sex is 男 然后会输出一个TRUE 因为 sp2 其实就是sp 他们引用的是同一个对象,那么如果我们现在不想这么做 我们想通过 input 和 sex来判断是不是相同 怎么做呢? 可以看看下面这段代码 从刚才的代码上扩充

 

class Shape
{
private string input;

public string Input
{
get { return input; }
set { input = (string.IsNullOrEmpty(value) ? "No" : value); }
}

private string sex;

public string Sex
{
get { return sex; }
set { sex = (string.IsNullOrEmpty(value) ? "" : value); }
}

public override string ToString()
{
return string.Format("Hello {0} You Sex is {1}", input,sex);
}

public override bool Equals(object obj)
{
Shape s
= obj as Shape;
bool b = false;
if (s != null)
{
if (this.input == s.input && this.sex == s.sex)
{
b
= true;
}
else
{
b
= false;
}
}
else
{
Console.WriteLine(
"You input is error!");
}
return b;
//return base.Equals(obj);
}

public override int GetHashCode()
{
return this.ToString().GetHashCode();
}
}

这里 我们 override 了Equals方法 然后用AS 做了一个类型转换as 关键字 在做转换时 如果对象不可以被转换 则会返回NULL 其它的代码应该 一眼就能看出来了 最后 如果重写Equals方法 就要把 GetHashCode 也一起重写 获取散列值的方法很多 最简单的就是 tostring().gethashcode() 然后看看怎么调用

 

static void Main(string[] args)
{
Shape sp
= new Shape();
sp.Input
= "Man";
sp.Sex
="";

Shape sp3
= new Shape();
sp3.Input
= "Man";
sp.Sex
= "";

Console.WriteLine(sp3.Equals(sp));
}

虽然 这是2个对象 但最后还是会返回true 因为我们重写Equals方法 呵呵 就是这么简单 如果觉得对自己有帮助的 就顶一下 要是没帮助 或者 觉得我哪里说的不对都可以说出来哦 哈哈