我很想知道this
中base
和C#
对象之间的区别。使用它们时的最佳做法是什么?
答案 0 :(得分:30)
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();
}
}
答案 1 :(得分:11)
这两个关键词非常不同。
this
是指当前实例(不是“当前类”)。它只能用于非静态方法(因为在静态方法中没有当前实例)。在this
上调用方法将以与在包含相同实例的变量上调用方法相同的方式调用该方法。
base
是一个允许继承方法调用的关键字,即它从基类型调用指定的方法。它也只能用于非静态方法。它通常用于虚方法覆盖,但实际上可用于调用基类型中的任何方法。它与普通的方法调用非常不同,因为它绕过了正常的虚方法调度:它直接调用基本方法,即使它是虚拟的。
答案 2 :(得分:9)
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 say hi!”
答案 3 :(得分:1)
“this
”关键字指向当前对象的地址。我们可以使用“this
”关键字来表示当前对象(当前类)。
“base
”关键字代表“父类”的地方
因此,如果您想使用父类的/ call函数,您可以使用“base
”关键字
base
在函数重写中非常有用,可以调用父类的函数。
答案 4 :(得分:0)
this
指的是当前正在使用的任何对象。 Base
一般来说是指基类。
如果对象属于base
,那么在这种情况下this
也可以引用base
对象。
答案 5 :(得分:0)
this
指的是当前的类实例。
base
指的是当前实例的基类,即从中派生它的类。如果当前类未明确派生自任何base
,则会引用System.Object
类(我认为)。
答案 6 :(得分:0)
假设你有这样的代码
class B extends A {
public B () {
// this will refer to the current object of class B
// base will refer to class A
}
}
注意:代码的语法在java中,但它是不言自明的。
答案 7 :(得分:0)
base - 用于从派生类
中访问基类的成员this - 引用类的当前实例并继承
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"; //!
}
}
答案 8 :(得分:-1)
如果你在类中使用 this.function() ,会因为 stackoverflow 出现错误。