2010-09-17 2 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

строго говоря, это относится к текущему экземпляру класса, а не к текущему типу класса. –

+0

@Adrian, да хорошая точка. Обновлено мое сообщение, чтобы принять во внимание. –

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

Вышеприведенные печатает «Base говорит привет!» а затем «Derived говорит привет!»

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 очень полезен в функции, переопределяющей функцию вызова родительского класса.

 Смежные вопросы

  • Нет связанных вопросов^_^