Difference between this and base
this
represents the current class instance while base
the parent. Example of usage:
public class Parent
{
public virtual void Foo()
{
}
}
public class Child : Parent
{
// call constructor in the current type
public Child() : this("abc")
{
}
public Child(string id)
{
}
public override void Foo()
{
// call parent method
base.Foo();
}
}
The two keywords are very different.
this
refers to the current instance (not the “current class”). It can only be used in non-static methods (because in a static method there is no current instance). Calling a method onthis
will call the method in the same way as it would if you called it on a variable containing the same instance.base
is a keyword that allows inherited method call, i.e. it calls the specified method from the base type. It too can only be used in a non-static method. It is usually used in a virtual method override, but actually can be used to call any method in the base type. It is very different from normal method invocation because it circumvents the normal virtual-method dispatch: it calls the base method directly even if it is virtual.
Darin is right on. An example may also help. (There wasn't an example when I initially posted. Now there is.)
class Base {
protected virtual void SayHi() {
Console.WriteLine("Base says hi!");
}
}
class Derived : Base {
protected override void SayHi() {
Console.WriteLine("Derived says hi!");
}
public void DoIt() {
base.SayHi();
this.SayHi();
}
}
The above prints "Base says hi!" followed by "Derived says hi!"