在以下代码中
// MVVM Views part class
public partial class DashBoard : UserControl
{
public DashBoard()
{
InitializeComponent();
this.DataContext = new DashBoardViewModel();
}
}
我们可以使用base.DataContext来代替this.DataContext。在哪种情况下我们可以使用base而不是这个?
答案 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: - 在已被另一个方法覆盖的基类上调用方法。 - 指定在创建派生类的实例时应调用哪个基类构造函数。 在我的实践中,我使用了第一个场景,当(此)方法以异常结束时,我试图调用更通用(基础)方法。祝好运!