虚拟语气的句子按道理是应该配套用的:主句had done +从句would have done.
could have done也表示虚拟语气,它的含义是“本来能做但没有做”,如He could have passed the exam.(本来能考及格但是没有).
might have done:①表示对过去某事的推测,认为某一件事情在过去可能发生了.如果使用might,语气就比较婉转或更加不肯定,如:Mary might have learned some Chinese before.
②可以表示过去本来可以做到而实际没有做到的事情,有“劝告”或“责备”的语气,如:You didn't do the work well that day.You might have done it better.
should have done只用于谈论过去情况,主要有两个用法:①用于推测过去已经发生的情况.如:He should have arrived by now.此时他本该到了.②用于指本该发生而实际上未发生的情况.如:You should have told me so before.你早就应该告诉我
希望对你帮助,