C# 方法签名、重载、重写:所有这些术语都相关吗?
“重载”和“重写”这两个术语听起来非常相似(这就是为什么它们有时相互对立的原因),但这两个概念在技术上是否相关C# 方法签名、重载、重写:所有这些术语都相关吗?,c#,.net,overloading,overriding,method-signature,C#,.net,Overloading,Overriding,Method Signature,“重载”和“重写”这两个术语听起来非常相似(这就是为什么它们有时相互对立的原因),但这两个概念在技术上是否相关 术语“重载”和“重写”是否相关 术语“重载”取决于“方法签名”的定义。所以我有一个类似的问题 (相关一)术语“”是否也与“凌驾”相关 重载是指具有多个同名但参数不同的函数。比如说 void SayHi(string name) { ... } void SayHi(string, int age) {.... } 比如说 void SayHi(string name) { ... }
重载是指具有多个同名但参数不同的函数。比如说
void SayHi(string name) { ... }
void SayHi(string, int age) {.... }
比如说
void SayHi(string name) { ... }
void SayHi(string, int age) {.... }
这些是重载
重写“替换”了一个现有函数,因此您接受了一个现有函数,并提供了一个具有相同名称和相同参数的全新函数
class Person
{
public virtual void SayHi(string name)
{
// ....
}
}
class Teenager : Person
{
public override void SayHi(string name)
{
// ....
}
}
方法签名与重写相关,因为新的重写函数必须具有与其尝试重写的方法相同的方法签名,并且返回类型也必须相同
方法签名与重载有关,重载必须有不同的方法签名。
重载是指具有相同方法或函数名的多个版本,其中每个类型都有不同的参数类型,如:C++中的代码> INIT(int,int)< /> >和<代码> init(const char)。使用特定于参数类型的实现。编译器将根据您在特定调用中使用的参数选择要调用的版本。方法签名指的是参数的类型和顺序。对于重载,不同版本的方法的方法签名必须不同
重写是指一个派生类实现它自己在基类中声明的方法版本,将该方法的基类实现替换为该派生类特有的基类实现。对于重写,派生类方法的方法签名必须与基类方法的方法签名相同。如果不同,则派生类重载基类方法,而不是重写它。确切地说:重写与“方法签名”和“返回类型”相关,但重载仅与“方法签名”相关。因此,这些概念之间有两个区别。重写和重载的第一个区别是它们的用途。第二个是检查返回类型是否覆盖,但忽略重载(以避免同一类型中的public int GiveMeSomething()和public string GiveMeSomething()等方法的歧义)。我希望在MSDN“方法签名”页面上找到第二个区别,因为所有这些概念(“方法签名”,“重写”和“重载”)是相关的。警告:通常,为了方法签名的目的,会忽略返回类型。如果在静态类型语言中重写方法,则需要保持返回类型相同,或者注意新的返回类型和任何
virtual
声明,以确保运行时返回的内容与编译器预期的内容匹配。这当然不是动态类型语言的问题。