c# - 无定义或扩展方法 - ISupportInitialize

标签 c# .net .net-reflector

我正在将 dll 反编译为 C#。反编译器生成的项目之一包含 1000 多个错误行,如下所示:

this.pictureBox1.BeginInit();

Error 385 'System.Windows.Forms.PictureBox' does not contain a definition for 'BeginInit' and no extension method 'BeginInit' accepting a first argument of type 'System.Windows.Forms.PictureBox' could be found (are you missing a using directive or an assembly reference?)

常规 Picturebox 没有 BeginInit() 方法。我只是注释掉了这些行:

//this.pictureBox1.BeginInit();

然后我检查了另一个反编译器的输出,如下所示,VS 编译器没有出现以前的错误:

((ISupportInitialize)this.pictureBox1).BeginInit();

由于崩溃,我无法使用第二个反编译器一次导出所有源代码。现在我不确定我必须做什么。我无法运行和调试该项目,因为需要首先清除其他错误。我的选择是:

  1. 只需注释掉这些行即可。
  2. 修改并插入 (ISupportInitialize) 标记。
  3. 如果可能,创建一个扩展方法。

最后一个选项对我来说似乎最简单。我可以创建 BeginInit() 扩展方法吗?它会正常工作吗?我该如何实现和使用 ISupportInitialize?

最佳答案

试试这个:

public static class PictureBoxExtension {
   public static void BeginInit(this PictureBox pb){
     ((ISupportInitialize)pb).BeginInit();
   }
}

或者更好的是,您可以对所有支持 ISupportInitialize 的控件尝试此操作。这是对正常访问隐藏的,因为它是显式实现的,因此我们可以使用此扩展来公开它(无需转换):

public static class SupportInitExtension {
   public static void BeginInit<T>(this T c) where T : ISupportInitialize {
     c.BeginInit();
   }
}

关于c# - 无定义或扩展方法 - ISupportInitialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035854/

相关文章:

c# - 使用 WPF 在 C# 中异步加载 BitmapImage

asp.net - Webapi、Webhost 和 Owin 之间的关系

.net - 温莎城堡并将实例创建为工厂

c# - .NET exe/dll 混淆

.net-reflector - Dotpeek重新编译反编译文件

c# - 当 .NET 反射器显示它已在 .NET Framework 中完成时,为什么我不能将属性或索引器作为 ref 参数传递?

c# - 通过后台代码设置DataGridTextColumn.ElementStyle

c# - ScaleTransform 部分缩放 ContextMenu

c# - 使用反射创建通用 Repository<T>

c# - 最小化到托盘使表单不可见