IHTMLDocument は、それを実装するオブジェクトが提供するものを表す、本質的に「壊れない」コントラクトであるインターフェイスです。
新しいバージョンのコードに移行するときにインターフェイスを変更すると、そのコントラクトが壊れ、そのコントラクトに依存しているコードが壊れます。
を作成するとします:
public interface IMyInterface {
public int Property1 { get; set; }
}
1 年後、Property2 を追加する必要がありますが、インターフェイスを変更することはできません。したがって、それを回避する1つの方法は、次を作成することです。
public interface IMyInterface2 {
public int Property2 { get;set; }
}
そして、 IMyInterface を実装している古いクラスで:
public class MyObject : IMyInterface, IMyInterface2 {
public int Property1 { get {} set {} }
public int Property2 { get {} set {} }
}
そうすれば、古いコントラクトを破ることはありませんが、次のようなコードで新しいインターフェイスを使用できます。
if (obj is IMyInterface) {
Console.WriteLine(((IMyInterface)obj).Property1);
if (obj is IMyInterface2) {
//more
}
}
それがマイクロソフトがしたことです。IHTMLDocument が含まれている mshtml ライブラリは COM ライブラリであり、COM はインターフェイスに大きく依存しています。そのため、ライブラリが進化するにつれて、Microsoft はより多くのインターフェイスを追加して、新しい機能/コードを公開しました。
IHTMLTxtRange は、より一般的に使用されるTextRangeオブジェクトのインターフェイスです。テキスト「フラグメント」または「範囲」を解析するための一連の機能を公開します。
http://www.webreference.com/js/column12/trmethods.html