首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这与base之间的区别

这与base之间的区别
EN

Stack Overflow用户
提问于 2010-09-17 14:52:30
回答 9查看 21.9K关注 0票数 21

我很想知道this和C#中的base object之间的区别。使用它们时的最佳实践是什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-09-17 14:54:24

this表示当前类实例,而base表示父类实例。用法示例:

代码语言:javascript
运行
复制
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();
    }
}
票数 40
EN

Stack Overflow用户

发布于 2010-09-17 14:58:57

这两个关键字非常不同。

  • this指的是当前实例类(不是“current”)。它只能在非静态方法中使用(因为在静态方法中没有当前实例)。在this上调用方法的方式与在包含相同instance.
  • base的变量上调用该方法的方式相同,这是一个允许继承方法调用的关键字,即,即它从基类型调用指定的方法。它也只能在非静态方法中使用。它通常用在虚方法重写中,但实际上可以用来调用基类型中的任何方法。它与普通的方法调用有很大的不同,因为它绕过了普通的虚方法分派:它直接调用基方法,即使它是虚的。
票数 13
EN

Stack Overflow用户

发布于 2010-09-17 14:59:15

达林是对的。举个例子也可能会有所帮助。(我最初发帖的时候还没有一个例子。现在有了。)

代码语言:javascript
运行
复制
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 says!“紧随其后的是"Derived says!“

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3733234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档