调用的方法,如果它属于禁止此参数的类

时间:2012-01-10 15:50:36

标签: c# wpf

我有以下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#语言设施允许哪些内容? (以及对语言设计的评论:这使得阅读遗留代码非常困难。)

1 个答案:

答案 0 :(得分:3)

这称为extension methods

  

扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但它们被称为实例方法

我使用它们遇到了这些问题

  1. 狩猎文件以确定他们在何处定义。
  2. 它们不能被定义为虚拟,因此可能导致问题。在我参与的其中一个项目中,Arc来自Circle。有人认为Transform方法应该是一种扩展方法。所以大部分时间都有效。转换Circle会产生转换后的Circle,与Arc相同。但是当Arc用作Circle引用时,它会导致细微的错误。