易截截图软件、单文件、免安装、纯绿色、仅160KB

C#中的==,!=等符号重载,以及重载等号操作

通过一个实际的例子来介绍。其中重载==,!=,Equal,GetHashCode函数。
public class Record
{
public string[] arr = null;
public bool hasEqual = false;
//重载一个下标运算符号
public string this[int index]
{
get
{
return arr[index];
}
set
{
arr[index] = value;
}
}
public override int GetHashCode()
{
// 在这里使用字符串数组的hashcode,避免自己完成一个算法
return arr.GetHashCode();
}
public Record(int count)
{
if (count < 1)
{
throw new Exception("数组的长度不能小于1");
}
arr = new string[count];
}
public static bool operator ==(Record rec1, Record rec2)
{
//注意我们调用Equals来判断是否相等。而不是在自己的函数中判、断。这是因为如果在自己的函数中判断。比如有rec2=null的情况。如果是这种情况。我们要判断if(rec2==null) {…}。其中rec2==null也是调用一个等号运算符,这里面有一个递归的过程,造成了死循环。
return Object.Equals(rec1, rec2);
}
public static bool operator !=(Record rec1, Record rec2)
{
return !Object.Equals(rec1, rec2);
}
public override bool Equals(object obj)
{
//判断与之比较的类型是否为null。这样不会造成递归的情况
if (obj == null)
return false;
if (GetType() != obj.GetType())
return false;
Record rec = (Record)obj;
int count = rec.arr.Length;
for (int i = 0; i < count; i++)
{
if (this.arr[i] != rec.arr[i])
{
return false;
}
}
return true;
}
}

以上就是介绍重载==,!=,Equal,GetHashCode的方法。但是有的时候我们需要重载 = 操作符,来方便我们进行传递,这在C++里可以使用符号重载来实现,但是C#里面就行不通了,不信你可以试试,编译器会报错的。C#里实现相同效果使用的并不是对 = 符号操作进行重载,而是通过以下方法来重载
原来C++的程序员一定会写operator=的,但是这在c#中是错误
的.
我们可以通过转换来实现重载等号的目的.
c#中有implicit和explicit关键字.可以实现隐式和显示
转换
示例:
class MyString
{
private string _str;
private MyString(string str)
{
this._str = str;
}
public static implicit operator MyString(string str)
{


相关文档:

c#多线程刷新界面

这个问题也不知道难倒了多少C#豪杰。比起MFC的界面刷新,在WINFORM中来实现多线程刷新真是很痛苦,故写此文。
多线程刷新界面主要用到多线程,委托,线程安全、事件等一系列高难度的C#操作。
关于委托和事件,这有一篇很易懂的文章:hi.baidu.com/anglecloudy/blog/item/a52253ee804d052f2df534ab.html
======== ......

根据字体大小得到字符串显示时的宽度(C#)

字符串的宽度自适应容器
 Graphics g = Graphics.fromImage(new Bitmap(1, 1));
 SizeF size = g.MeasureString(lblTitle.Text, new Font("宋体", 24 * 0.0625F, FontStyle.Bold));
 float oldSize=(800*0.0625F);//1px=0.0625em
 float newSize = (0.75F/size.Width )* oldSize;
size.Width 的单 ......

根据宽度来决定显示的字符串长度(C#)

根据宽度来决定显示的字符串长度 (C#,VS2005)
如果 lable长度固定但字符串长度可变,如果超过了lable显示的长度时,希望用 ...代替剩下的字符,这时需要一个函数
Graphics.MeasureString
具体代码如下
  public string Abbreviation(string str)
        {
  &nbs ......

c#3.0 新特性之隐含类型VAR

在C#3.0中增加了一个变量声明var,这个声明和JavaScript的var类似,蛋也不同。(*^__^*) 嘻嘻……
1.相同点,它可以用var来声明任何类型的局部变量。
2.不同点 它仅仅告诉编译器,该变量需要根据初始化表达式来确定变量的类型,而且只能是局部变量。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号