在我的C#应用程序中,我有一个基类,它包含一个函数Myfunction。 我有一个来自上面的基类的派生类,它也包含与基类相同的函数,这个概念是否正确实现?
public class BaseClass
{
public void MyFunction()
{
Console.WriteLine("");
}
}
public class DerivedClass:BaseClass
{
public void MyFunction()
{
Console.WriteLine("");
}
}
我是编程的新手,对不起我的英文
答案 0 :(得分:5)
你这样做实际上是hidden 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有两个重载。
答案 1 :(得分: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("");
}
}
答案 2 :(得分:0)
在此示例中,DerivedClass中的MyFunction会覆盖BaseClass中的MyFunction。
如果你有另一个MyFunction,这次是'MyFunction(int参数)',你就会重载MyFunction。
答案 3 :(得分: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);
}
}