2010-09-17 34 views

Trả lời

24

this đại diện cho cá thể lớp hiện tại trong khi base cấp độ gốc. Ví dụ về cách sử dụng:

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

nói đúng điều này đề cập đến cá thể lớp hiện tại, không phải loại lớp hiện tại. –

+0

@Adrian, có điểm tốt. Đã cập nhật bài đăng của tôi để tính đến. –

0

this là bất kỳ đối tượng nào hiện đang được sử dụng. Base đề cập đến một lớp cơ sở nói chung.

Nếu đối tượng là base thì trong trường hợp đó this cũng có thể tham chiếu đến đối tượng base.

0

this là phiên bản lớp hiện tại.

base đề cập đến lớp cơ sở của cá thể hiện tại, tức là lớp mà nó bắt nguồn. Nếu lớp hiện tại không được bắt nguồn từ bất cứ điều gì base sẽ tham chiếu đến lớp System.Object (tôi nghĩ).

7

Hai từ khóa rất khác nhau.

  • this đề cập đến dụ hiện (không phải là “lớp học hiện tại”). Nó chỉ có thể được sử dụng trong các phương thức không tĩnh (vì trong một phương thức tĩnh không có cá thể hiện tại). Gọi một phương thức trên this sẽ gọi phương thức theo cách tương tự như khi bạn gọi nó trên một biến chứa cùng một cá thể.

  • base là từ khóa cho phép cuộc gọi phương thức được kế thừa, tức là nó gọi phương thức được chỉ định từ loại cơ sở. Nó cũng chỉ có thể được sử dụng trong một phương thức không tĩnh. Nó thường được sử dụng trong một phương thức ghi đè ảo, nhưng thực sự có thể được sử dụng để gọi bất kỳ phương thức nào trong kiểu cơ sở. Nó rất khác với lời gọi phương thức bình thường bởi vì nó phá vỡ công văn phương thức ảo bình thường: nó gọi phương thức cơ sở trực tiếp ngay cả khi nó là ảo.

6

Darin là đúng. Một ví dụ cũng có thể hữu ích. (Không có ví dụ nào khi tôi đăng lần đầu. Hiện có.)

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

Bản in trên "Base nói hi!" tiếp theo là "Derived nói hi!"

0

phép nói rằng bạn có mã như thế này

class B extends A { 

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

} 

Lưu ý: Cú pháp của mã là trong java nhưng nó là tự giải thích.

0

cơ sở - được sử dụng để truy cập vào các thành viên của lớp cơ sở từ bên trong một lớp học có nguồn gốc

này - đề cập đến các trường hợp hiện tại của lớp và được thừa hưởng

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" điểm từ khóa vào địa chỉ của đối tượng hiện tại.chúng tôi có thể sử dụng từ khóa "this" để thể hiện đối tượng hiện tại (của lớp hiện tại).

Trường hợp là "base" từ khóa đại diện cho "Lớp cha"
Vì vậy, nếu bạn muốn sử dụng/chức năng gọi của lớp cha, bạn có thể sử dụng "base" Từ khóa.
base rất hữu ích trong chức năng ghi đè chức năng gọi của lớp cha.

Các vấn đề liên quan