2010-09-17 72 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在函數覆蓋父類的調用函數中非常有用。