【问题标题】:Overloading and overriding issue [duplicate]重载和覆盖问题[重复]
【发布时间】:2019-01-31 07:03:51
【问题描述】:

我想重写一个方法 (method(int x)):

public class A 
{
    public virtual void method(int x)
    {
        Console.WriteLine("base");
    }
}

public class B : A
{
    public override void method(int x)     
    { 
        Console.WriteLine("overridden");
    }

    public void method(Double x)    
    {
        Console.WriteLine("overloaded");
    } 
} 

我这样称呼它:

public static class Program  
{   
    public static void Main() 
    {
        B obj = new B();
        obj.method(1);
    } 
}

由于某种原因,“重载”被打印出来,而不是我所期望的“覆盖”。如果我将class B 更改为以下内容,Main 方法现在会打印“覆盖”:

public class B
{
    public void method(int x)     
    { 
        Console.WriteLine("overridden");
    }

    public void method(Double x)    
    {
        Console.WriteLine("overloaded");
    } 
} 

为什么会这样? 是因为 Override 关键字吗?

【问题讨论】:

  • 重载是用不同的签名编写相同的方法,而重写是改变继承方法的行为
  • 我添加了一个example,展示了void method(int x) 上的继承和覆盖如何改变行为..
  • @Op,你想解释一下这个行为,还是想解决它?
  • “为什么会这样?” - 我觉得这个问题很清楚。
  • @John 只是第二次打印中的一件小事,它应该是“class c:”而不是“class b”

标签: c# overriding overloading


【解决方案1】:

你没有覆盖这个函数,你是在重载它。如果将 1 转换为 int,它应该可以工作。

【讨论】:

  • 这是一个 C# 问题,方法覆盖不像您描述的那样工作。
  • @override 是您在 java 中编写覆盖的方式
  • 那么如果我将一个 int 作为参数传递..为什么它用双参数调用该方法
  • 哦,等一下,我明白了:D john 和 styx 都是正确的,我改变了答案
  • @MasterOfDesaster 我什至将 1 类型转换为 int 并通过它..即使重载也会被打印出来
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多