class Human{ public virtual void CleanRoom(){ Console.WriteLine("Human"); } } class Man:Human{ public override void CleanRoom(){ Console.WriteLine("Man"); } } class Woman:Human{ public override void CleanRoom(){ Console.WriteLine("Woman"); } } Human a = new Man(); Human b = new Woman(); a.CleanRoom(); b.CleanRoom();
自动调用相应的方法
同一个方法,但是里面的操作不一样
class Complex{ public int Number{get;set;} public static Complex operator +(Complex a,Complex b){ Complex c = new Complex(); c.Number = a.Number+b.Number; return c; } }
重载+,可以使用类与类直接相加
public static void PrintHello(){ Console.WriteLine("Hello"); } public static void PrintHello(string s){ Console.WriteLine("hello{0}",s); }
通过参数的数量和类型的不同来实现同名的方法,执行不同的功能。
class Animal{ public intAge{get;set;} public virtual void Bite(){} } class Dog:Animal{ public override void Bite(){ Console.WriteLine(Age); } }
父类方法声明为virtual,说明在子类中可以override重写此方法,若没有声明virtual,可以在方法中+new隐藏父方法
继承中实例化先调用父类构造函数再去调用子类的构造函数
当父类构造函数含有多个时,一般只调用默认的构造函数,可以在子类构造函数中指定父类构造函数:base()。也可以引用自身的:this()
Animal dog=new Dog();
用父类来引用子类的实例,调用重写方法是为子类的方法,因为它已经覆盖了父类的方法。当调用的是为new的隐藏父类方法时,因为引用为父类,所以调用的是父类方法,可以通过强制转化为Dog来调用子类的new隐藏了的父类方法。
public,private,internal,protected
public 允许外部访问
private 只能在类的本身访问
internal 在这个类所在的程序集中都能方访问
程序集是一个包,一个项目,可以是.exe或.dll,一个程序集可以包含多个namespace
protected 类本身与派生类可访问
SortList<int,int> sl=new SortList<int,int>(); sl.Add(5,100); sl.Add(1,102); foreach(var sle in sl){ Console.WriteLine(sle.value); }
Dictionary<string,string> d=new Dictionary<string,string>(); d.Add("first","chicai");
<string,string>对应的是键值的类型
强类型,线程不安全
Hashtable ht = new Hashtable(); ht.Add("First","chi"); ht.Add("Second","cai");
弱类型的键值对
List<int> intList = new List<int>(); //List的常用方法,强类型 intList.Add(600); intList.AddRange(new int[]{501,502});//添加多个元素 intList.Contains(200);//判断是否存在元素 intList.Indexof(501); intList.Remove(501); intList.RemoveAt(index); intList.Insert(1,1001);//指定位置插入 intList.Capacity;//集合的总大小 intList.Count;//元素的大小
集合一般在 System.Collection命名空间下
因为数组长度一般是固定的,所以要使用集合
ArrayList al = new ArrayList(); al.Add(5); al.Add("hello"); al.Remove(5);
每个元素都被当成object。类型不安全。