0

在我的 C# 应用程序中,我有一个基类,其中包含一个函数 Myfunction。我有一个来自上述基类的派生类,它也包含与基类相同的功能,这个概念是正确的实现吗?

public class BaseClass
{
   public void MyFunction()
   {
      Console.WriteLine("");
   }
}


public class DerivedClass:BaseClass
{
    public void MyFunction()
    {
        Console.WriteLine("");
    }
}

我是编程新手,对不起我的英语

4

4 回答 4

5

你这样做实际上已经隐藏 BaseClass.MyFunction了。

如果要正确覆盖,则必须将基本版本声明为virtual(或abstract),然后指定override

public class BaseClass
{
   public virtual void MyFunction() { }
}

public class DerivedClass:BaseClass
{
    public override void MyFunction() { }
}

重载和覆盖是不同的东西。上面显示了压倒一切。重载是指存在多个同名但参数不同的方法。例如,如果你有这些方法:

public void MyFunction(int i) {}
public void MyFunction(decimal d) {}

你会说 MyFunction 有两个重载

于 2013-06-21T04:11:24.770 回答
2

不,这是错误的实现method overloading

如果您创建一个具有相同名称相同参数的方法,那么它将是method overriding

如果您创建一个名称相同参数不同的方法,那么它将是method overloading

如果您需要为 实现示例method overriding,则在您的上添加一个关键字并override在您的上derived class method添加一个virtual关键字base class method

public class BaseClass
{
   public virtual void MyFunction()
   {
      Console.WriteLine("");
   }
}


public class DerivedClass:BaseClass
{
    public override void MyFunction()
    {
        Console.WriteLine("");
    }
}

如果你想实现一个例子overloading,那么你只需要改变你的两个方法的参数。变化意味着它们必须彼此不同。例如:

    public class BaseClass
    {
       public void MyFunction()
       {
          Console.WriteLine("");
       }
    }


    public class DerivedClass:BaseClass
    {
        public void MyFunction(string input)
        {
            Console.WriteLine("");
        }
    }
于 2013-06-21T04:07:06.027 回答
0

您必须以这种方式重载/覆盖方法

   public   class derived_Class : mybaseclass 
    {

        public override void mymethod()
        {
            // IF you want to call the base class function as well then you call base.mymethod() ; 
            base.mymethod();
        } 


    }

    class mybaseclass
    {

        // When you want to overide a method , you must use Virtual keyword
        public virtual void mymethod()
        {

        }

        // This is an overload of overload_method 
        // when you write many methods from same name with different arguments, it's an overload of the method
        public void overload_method()
        {
        } 
        public  void overload_method(string m)
        {

        } 

        // When you use an overload 
        public void use()
        {
            overload_method();
            overload_method(null); 
        } 
    } 
于 2013-06-21T04:54:07.780 回答
0

在此示例中,DerivedClass 中的 MyFunction 覆盖 BaseClass 中的 MyFunction。

如果你有另一个 MyFunction,这次是 'MyFunction(int parameter)',你就会重载 MyFunction。

于 2013-06-21T04:07:45.263 回答