1

在下面的代码中

// MVVM Views part class
public partial class DashBoard : UserControl
{
    public DashBoard()
    {
        InitializeComponent();
        this.DataContext = new DashBoardViewModel();
    }
}

我们可以使用 base.DataContext 代替 this.DataContext。在哪种情况下,我们可以使用 base 代替 this 吗?

4

4 回答 4

3

通常使用起来会更清楚this。您通常只指定base何时要显式调用基类构造函数或重写方法或属性的基实现。

使用base.DataContext起作用,但它可能意味着这this.DataContext意味着不同的东西。

于 2012-05-25T07:26:36.137 回答
2

您用于this访问在当前类中定义的方法(或超类,如果它不在当前类中)。您用于base访问超类或更高级别中的方法。在这种情况下,您可以使用其中任何一个(或者正如 Marc 上面指出的那样不使用)。

我更喜欢发射,this除非它(很少)需要。

于 2012-05-25T07:27:28.307 回答
1

添加到其他人所说的话,基地。当您使用 overrides 或 new 关键字覆盖了基类中的某些内容时使用,您需要使用 base 来访问原始方法。

class a
{
   public virtual void method1()
   {
   }

   public string property1 { get; set; }
}

class b : a
{
    // this has it's own instance in b, the only way to get to
    // the original property1 is with base (or reflection)
    public new string property1 { get; set; }

    public override void method1()
    {
       // the only way to get to the original method1 and property1
       base.method1();
       base.property1 = "string";
    }
}

在您的示例中,如果 DataContext 属性使用这些关键字中的任何一个,那么 base 和这根本不是同一件事。

于 2012-05-25T07:40:15.010 回答
1

考虑到您的情况,您正在尝试用一些值初始化类DashBoard的DataContext属性。因此,如果您随后调用(基)UserControl类对象的DataContext类型属性,它仍然不会被初始化。因此,要决定初始化哪个属性,您必须查看程序的逻辑。

基本上 MSDN 告诉你应该在两个场景中使用 (base.): - 调用基类上的一个方法,该方法已被另一个方法覆盖。- 指定在创建派生类的实例时应调用哪个基类构造函数。在我的实践中,当(此)方法以异常结束时,我使用了第一个场景,我试图调用更通用的(基本)方法。祝你好运!

于 2012-05-25T08:31:09.117 回答