2010-09-17 73 views

回答

24

this代表当前类实例,而base父代。使用示例:

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(); 
    } 
} 
+0

严格地说,这是指当前的类实例,而不是当前的类类型。 – 2010-09-17 07:00:58

+0

@阿德里安,是的好点。更新我的帖子以考虑到。 – 2010-09-17 07:07:07

0

this指的是当前正在使用的任何对象。一般而言,Base是指基类。

如果对象是base那么在这种情况下this也可以参考base对象。

0

this引用当前类实例。

base引用当前实例的基类,即它从中派生的类。如果当前班级没有明确从任何派生base将参考System.Object类(我认为)。

7

这两个关键字是非常不同的。

  • this当前实例(不是“当前级”)。它只能用于非静态方法(因为在静态方法中没有当前实例)。调用this上的方法将以与在包含相同实例的变量上调用该方法时相同的方式调用该方法。

  • base是一个关键字,允许继承方法调用,即即它从基类型调用指定的方法。它也只能用于非静态方法。它通常用于虚拟方法覆盖,但实际上可用于调用基本类型中的任何方法。它与常规方法调用非常不同,因为它绕开了正常的虚方法调度:即使它是虚拟的,它也直接调用基方法。

6

达林是对的。一个例子也可能有所帮助。 (有没有一个例子,当我最初公布。现在有。)

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(); 
    } 
} 

上面打印“基地说:嗨!”其次是“派生说你好!”

0

可以说你有一个这样

class B extends A { 

    public B() { 
     // this will refer to the current object of class B 
     // base will refer to class A 
    } 

} 

代码说明:代码的语法是Java编写,但它是自我解释。

0

基 - 用于将派生类

此内从访问基类的成员 - 指类的当前实例,并继承

class BaseClass 
{ 
    public string BaseAttr { get; set; } 
} 
class A : BaseClass 
{ 
    public string Attr { get; set; } 
    public void Method() 
    { 
     this.Attr = "ok"; 
     this.BaseAttr = "base ok"; 
     base.BaseAttr = "ok"; 
     base.Attr = "unavailable"; //! 
    } 
} 
1

this”关键字指向当前对象的地址。我们可以使用“this”关键字来表示当前对象(当前类)。

凡为“base”关键字代表了“父类”
所以,如果你想使用/父类的通话功能,您可以使用“base”关键字。
base在函数覆盖父类的调用函数中非常有用。

相关问题