- 重载的方法提供转换的实现
->定义隐式转换使用关键字 implicit
->定义显式转换使用关键字 explicit
->转换顺序与定义顺序相同
->变量1=变量2 对应参数 类型1(类型2 value)
->语法:
[访问修饰符] static[implicit[explicit]] Operator 目标类型(待转换类型 value)
{
目标类型 0=new 目标类型();
//赋值操作,显示操作可以将赋值操作用checked{}块包起来,如放不下,就异常
return 0;
}
class Program { static void Main(string[] args) { Person p = new Person(); Person p1 = new Person(); p1.Age = 25; p.Age = 34; int num1 = p; int num2 = p + p1; } } class Person { public int Age { set; get; } public static implicit operator int(Person p){ return p.Age; } public static int operator +(Person p1, Person p2) { return p1.Age + p2.Age; } }
- string字符串
string的常用方法前面博客已有记载,此处补充说明,string类的比较方法
-》==单个字符进行比较
-》Equal() 可以进行控制的比较。
bool <object>.Equals(object o);
bool<string>.Equals(string str);
bool string.Equals(string str1,string str2)
int string.Compare(string str1,string str2);
用反编译工具查看String。Equals()
其中object.ReferenceEquals(this,obj)表示比较地址
return EqualsHelper(this,strB);里面是逐个字符比较
string str1 = new string(new char[] { ‘a‘, ‘b‘, ‘c‘ }; string str2 = "abc"; string str3 = "abc"; Console.WriteLine(str1.Equals(str2));//结果为true Console.WriteLine(str2.Equals(str3));//结果为True Console.ReadKey();
str2与str3内存地址相同(string字符串拘留池),故两个str1与str2相等。str1与str2内存地址不同,但结果还是为true,二者相等,这事因为string.Equals()方法已经重写object的Equal()方法。重写的Equals()方法内部有个EqualsHelper(this,strB)方法,该方法在判断二者的地址不相同,且二者都部位null对象的时候执行。遍历字符串的每个字符,逐个比较。
- ArrayList线性集合和Hashtable集合(http://www.cnblogs.com/tobecabbage/p/3479209.html)补充说明:
hashtable实现的原理简介:
class Program { static void Main(string[] args) { ZQHash h = new ZQHash(); h.Add("张三", 19); h.Add("王五", 29); } } class ZQHash { object[] keys = new object[255]; object[] values = new object[255]; public void Add(object k, object value) { //调用object的GetHashCode得到一个数字作为索引 int index = Math.Abs(k.GetHashCode() % 256);//此处需要考虑若生成重复的数字索引的情况 keys[index] = k; values[index] = value; } public object this[object key] { get { int index = Math.Abs(key.GetHashCode() % 256); return values[index]; } } }