你应该调用base.methodName还是this.methodName

时间:2011-03-23 01:01:25

标签: c# inheritance syntax

如果您在从基类继承并且想要在该基类上调用受保护或公共方法的类中编写代码,那么调用base.MyProtectedMethod()或者调用this.MyProtectedMethod()或者最好是对(或对或错) public class MyBase() { .... protected void DoStuff() { // some stuff } } public class MyChildClass() : MyBase { public MyNewMethod() { // do some work this.DoStuff(); base.DoStuff(); } } (在c#中)?有什么区别?两者似乎都有效。

例如:

MyNewMethod

在{{1}}中这两次是同一回事吗?

3 个答案:

答案 0 :(得分:10)

这与MyNewMethod完全相同。

我只建议在实际需要时使用base.,即:当你需要在重写方法中显式调用方法的基类版本时。

答案 1 :(得分:2)

您想显式调用父类吗?然后使用base

如果您不想,请使用this

This显示了使用base的一个很好的例子。

答案 2 :(得分:1)

只是为了说明里德和凯文的答案:

namespace ConsoleApplication1
{
    class A
    {
        public virtual void Speak()
        {
            Hello();
        }
        virtual protected void Hello()
        {
            Console.WriteLine("Hello from A");
        }
    }

    class B : A
    {
        public override void Speak()
        {
            base.Hello(); //Hello from A
            this.Hello(); //Hello from B
        }

        override protected void Hello()
        {
            Console.WriteLine("Hello from B");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {

            B b = new B();
            b.Speak();
        }
    }
}