当我在C#中继承一个方法并调用继承的方法时。我需要用base还是这个

当我在C#中继承一个方法并调用继承的方法时。我需要用base还是这个,c#,inheritance,this,base,C#,Inheritance,This,Base,当我们在C#中继承一个方法时,它是如何调用它的最佳方式。用碱或这个。以下是一些示例: class User { public void LogData() { Console.WriteLine($"Log data from user"); } } class Admin : User { public void DeleteData() {

当我们在C#中继承一个方法时,它是如何调用它的最佳方式。用碱或这个。以下是一些示例:

   class User
    {
        public void LogData()
        {
            Console.WriteLine($"Log data from user");
        }
    }

    class Admin : User
    {
        public void DeleteData()
        {
            // How is it right way to call that method?
            // base.LogData();
            // or
            // this.LogData();
            Console.WriteLine("Deleting");
        }
    }

下面是如何从子类调用基方法的示例

class a
{
    public void callMe()
    {
        // Base logic
    }
}
class b : a
{
    public new void callMe()
    {
        // This Will call Base method
        base.callMe();
        // Derived Logic
    }
}

现在请注意“new”关键字的使用,它基本上是隐藏基本方法,这就是你如何超越一个方法

实际上,您只能使用基前缀来绕过当前上下文执行所在的类中本地定义的同名方法

此.LogData()的行为与上面示例中的LogData()相同

base.LogData()将调用在基类上定义的LogData,但需要注意的是,在该执行上下文中,LogData将把“this”类视为“User”类型的类,而不是“Admin”类。 这是因为继承模型。 每个“管理员”都可以是“用户”,但并非所有“用户”都是“管理员”

如果您的执行成功地进入基类,则LogData方法将只能访问User类上的成员,因为在该时间点上,Admin用户在方法执行期间已隐式地转换回“User”类

如上所述,有一个“new”关键字,您可以使用它来禁用与“hiding”方法关联的警告。 应该注意的是,我认为'new'关键字只起到禁用警告的作用,它实际上不便于重写方法

如果希望在派生类中重写和创建同名的方法,则应在适当的情况下使用virtual和override。 更多关于它们的信息可以在上面的链接中找到

bc.Method1();  
bc.Method2();  
dc.Method1();  
dc.Method2();  
bcdc.Method1();  
bcdc.Method2();
public override void Method1()  
{  
    Console.WriteLine("Derived - Method1");  
}  


public virtual void Method1()  
{  
    Console.WriteLine("Base - Method1");  
}  


// Output:  
// Base - Method1  
// Base - Method2  
// Derived - Method1  
// Derived - Method2  
// Derived - Method1  
// Base - Method2  

我认为在这种情况下你不需要任何一个。不管是一个,还是两个都不需要,都没关系。唯一重要的是你是否从重写的方法中调用它。我以两种方式(base和this)调用了它,结果是一样的。当然,两者都会做同样的事情(这里)。只要你没有重写该方法,就没有区别。一旦覆盖它,这意味着被覆盖的版本,而base意味着父版本。