C# 使用IHTML文档1、2、3和;4.

C# 使用IHTML文档1、2、3和;4.,c#,ihtmldocument,C#,Ihtmldocument,我在当前项目中使用web浏览器,目前我在设计模式下使用它使其可编辑,等等。我当前使用的代码是: WebBrowser.Document.DomDocument as IHTMLDocument2 什么是IHTMLDocument2、3或4?我还发现,在文档中标识当前选择范围时,range.text.replace方法的工作方式与string.replace不同 有人能给我解释一下IHTMLDocuments和IHTMLTxtRange的基本功能吗?IHTMLDocument是一个接口,本质上是

我在当前项目中使用web浏览器,目前我在设计模式下使用它使其可编辑,等等。我当前使用的代码是:

WebBrowser.Document.DomDocument as IHTMLDocument2
什么是IHTMLDocument2、3或4?我还发现,在文档中标识当前选择范围时,range.text.replace方法的工作方式与string.replace不同


有人能给我解释一下IHTMLDocuments和IHTMLTxtRange的基本功能吗?

IHTMLDocument是一个接口,本质上是一个“牢不可破”的契约,代表了实现它的对象将提供什么

在迁移到新版本的代码时更改接口将破坏该契约,进而破坏依赖该契约的代码

假设您创建:

public interface IMyInterface {
      public int Property1 { get;  set; }
}
一年后,您需要添加Property2,但无法更改界面。因此,一种解决方法是创建:

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是更常用对象的接口。 它公开了一系列解析文本“片段”或“范围”的功能