Мне интересно узнать разницу между и base
Объектом в C#
. Какова наилучшая практика их использования?Разница между этим и базой
ответ
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();
}
}
this
относится к любому объекту, который в настоящее время используется. Base
относится к базовому классу вообще.
Если объект имеет base
, тогда в этом случае this
может также ссылаться на объект base
.
this
относится к экземпляру текущего класса.
base
относится к базовому классу текущего экземпляра, то есть к классу, из которого он получен. Если текущий класс явно не выведен из чего-либо, base
будет ссылаться на класс System.Object
(я думаю).
Два ключевых слова очень разные.
this
относится к текущего экземпляра (не «текущего класса»). Его можно использовать только в нестатических методах (потому что в статическом методе нет текущего экземпляра). Вызов метода наthis
вызовет метод таким же образом, как если бы вы вызвали его в переменной, содержащей один и тот же экземпляр.base
это ключевое слово, которое позволяет унаследованной вызов методы, т.е. он вызывает указанный метод из базового типа. Он также может использоваться только в нестационарном методе. Он обычно используется в переопределении виртуального метода, но фактически может использоваться для вызова любого метода в базовом типе. Он сильно отличается от обычного вызова метода, поскольку он обходит обычную диспетчеризацию виртуального метода: он вызывает базовый метод напрямую, даже если он виртуальный.
Дарин находится прямо на. Примером может служить также пример. (Там не был пример, когда я первоначально отправил. Теперь есть.)
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 говорит привет!»
позволяет сказать, что у вас есть код этой
class B extends A {
public B() {
// this will refer to the current object of class B
// base will refer to class A
}
}
Примечание: Синтаксис кода в Java, но оно само за себя.
база - используется для доступа к членам базового класса внутри производного класса
это - относится к текущему экземпляру класса и унаследовал
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"; //!
}
}
«this
» ключевое слово указывает на адрес текущего объекта.мы можем использовать ключевое слово «this
» для представления текущего объекта (текущего класса).
Где, как «base
» ключевое слово, чтобы представлять «родительский класс»
Так что, если вы хотите использовать/вызов функции родительского класса вы можете использовать «base
» слова.
base
очень полезен в функции, переопределяющей функцию вызова родительского класса.
строго говоря, это относится к текущему экземпляру класса, а не к текущему типу класса. –
@Adrian, да хорошая точка. Обновлено мое сообщение, чтобы принять во внимание. –