第七天的培训内容

  • 重载的方法提供转换的实现

->定义隐式转换使用关键字 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对象的时候执行。遍历字符串的每个字符,逐个比较。


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];
            }
        }
    }
第七天的培训内容

第七天的培训内容

上一篇:[Leetcode]-- Roman to Integer


下一篇:比較C struct 與 C# unsafe struct内存分佈