我在当前项目中使用网页浏览器,目前我正在设计模式下使用它以使其可编辑等。我目前使用的代码是:
WebBrowser.Document.DomDocument as IHTMLDocument2
实际上IHTMLDocument2,3或4是什么?我还发现,在识别文档中的当前选择范围时,range.text.replace方法的工作方式与string.replace的工作方式不同。
有人可以向我解释IHTMLDocuments和IHTMLTxtRange的基本功能吗?
答案 0 :(得分:2)
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是更常用的TextRange对象的接口。 它公开了许多用于解析文本“Fragments”或“Ranges”的功能。