我有以下WPF代码:
public Window1()
{
InitializeComponent();
FlowDocument fd = new FlowDocument();
fd.LoadFromWordML("../../testdoc.docx");
FlowDocument(在System.Windows.Documents命名空间中)不具有LoadFromWordML方法。相反,此方法在本地定义如下:
public static void LoadFromWordML(this FlowDocument doc, string path)
然而,正如您所看到的,LoadFromWordML被调用,就像它是FlowDocument类的方法一样,实际上'this'参数被抑制。
C#语言设施允许哪些内容? (以及对语言设计的评论:这使得阅读遗留代码非常困难。)
答案 0 :(得分:3)
扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但它们被称为实例方法
我使用它们遇到了这些问题
Arc
来自Circle
。有人认为Transform
方法应该是一种扩展方法。所以大部分时间都有效。转换Circle
会产生转换后的Circle
,与Arc
相同。但是当Arc
用作Circle
引用时,它会导致细微的错误。