【问题标题】:Resharper offers to remove redundant inheritance from Window class in WPFResharper 提供从 WPF 中的 Window 类中删除冗余继承
【发布时间】:2011-03-25 18:41:49
【问题描述】:

在 WPF 项目中,Resharper 提供了从 Window 类中删除继承作为冗余:

using System.Windows;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

甚至可以删除using System.Windows;

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

为什么他实际上提供了这个,为什么没有继承一切都可以正常工作?正如我在 WPF 书籍中所读到的,任何窗口无论如何都应该被继承......

【问题讨论】:

    标签: c# wpf inheritance window resharper


    【解决方案1】:

    XAML 代码隐藏文件是部分类。编译器从 XAML 文件生成的代码还包括 Window 派生,因此代码隐藏中的派生是多余的。

    【讨论】:

    • 它摆脱了 Resharper 警告,但也可能使代码对新手来说可读性降低。无论哪种方式,它对最终输出都没有影响,所以这真的是个人喜好。
    • 您实际上并没有删除窗口继承。该类仍然继承 Window,只是不在您的代码隐藏文件中。如果在代码隐藏中删除它,仍然在设计器文件中指定。如果您在代码隐藏中有它,那么它会在两个地方指定。这就是为什么它被标记为冗余。
    • 另见C# Programming Guide: "所有指定基类的部分必须一致,但省略基类的部分仍然继承基类型。部分可以指定不同的基接口,并且最终类型实现了所有部分声明列出的所有接口。"
    【解决方案2】:

    您的MainWindow 类(与大多数设计器生成的类一样)是partial 类。这意味着您的类的实现可以分解为多个文件,只要它们都在同一个程序集中。

    因为MainWindow 的设计器生成的文件也包含: Window,所以没有必要将它包含在任何其他文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多