这还是基地​​?在哪种情况下我们可以使用base而不是this?

时间:2012-05-25 07:24:19

标签: c# .net inheritance

在以下代码中

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

我们可以使用base.DataContext来代替this.DataContext。在哪种情况下我们可以使用base而不是这个?

4 个答案:

答案 0 :(得分:3)

使用this通常更清晰。当您想要显式调用基类构造函数或重写方法或属性的基本实现时,通常只指定base

使用base.DataContext工作,但这可能意味着this.DataContext会产生不同的意思。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

添加其他人所说的基础。当您使用覆盖或新关键字覆盖基类中的某些内容时,您将需要使用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属性使用这些关键字中的任何一个,那么基础,这并不意味着相同的事情。

答案 3 :(得分:1)

考虑到您的情况,您尝试使用某个值初始化类 DashBoard DataContext 属性。因此,如果您再调用(base)UserControl 类对象的 DataContext 类型属性,它仍然不会被初始化。因此,要确定要初始化哪个属性,您必须查看程序的逻辑。

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