在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。 是否正确?
1个回答
展开全部
你要先理解重写、重载、重定义。
1、重定义new:派生类对基类的成员函数重新定义,即派生类定义了某个函数。该函数的名字与基类中的函数名字一样。
特点:1、不在同一个作用域,分别位于基类、派生类;2、函数的名字必须相同; 3、对函数的返回值、形参列表无要求
特殊情况:若派生类定义的该函数与基类的成员函数完全一样。返回值、形参列表均相同,且基类的该函数为virtual,则属于派生类重写基类的虚函数。
作用效果:若重新定义了基类中的一个重载函数。则在派生类中,基类中该名字的函数,即其他所有重载版本,都被自动隐藏,包括同名的虚函数。
2、重载:overload:函数名字相同,但它的形参个数或者顺序,或者类型不同,但是不能靠返回类型来判断。
特点:1、位于同一个类中;2、函数的名字必须相同;3、形参列表不同可能是参数个数 or 类型 or 顺序 不同,返回值无要求
特殊情况:若某一个重载版本的函数前面有virtual修饰,则表示它是虚函数。但它也是属于重载的一个版本
作用效果和原理:编译器根据函数不同的参数表将函数体与函数调用进行早绑定。重载与多态无关,只是一种语言特性,与面向对象无关。
3、重写override:派生类重定义基类的虚函数,即会覆盖基类的虚函数
特点:1、不在同一个作用域,分别位于基类、派生类;2、函数名、形参列表、返回值相同;3、基类的函数是virtual
特殊情况:若派生类重写的虚函数属于一个重载版本,则该重写的函数会隐藏基类中与虚函数同名的其他函数。
故:
在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。 是对的。
1、重定义new:派生类对基类的成员函数重新定义,即派生类定义了某个函数。该函数的名字与基类中的函数名字一样。
特点:1、不在同一个作用域,分别位于基类、派生类;2、函数的名字必须相同; 3、对函数的返回值、形参列表无要求
特殊情况:若派生类定义的该函数与基类的成员函数完全一样。返回值、形参列表均相同,且基类的该函数为virtual,则属于派生类重写基类的虚函数。
作用效果:若重新定义了基类中的一个重载函数。则在派生类中,基类中该名字的函数,即其他所有重载版本,都被自动隐藏,包括同名的虚函数。
2、重载:overload:函数名字相同,但它的形参个数或者顺序,或者类型不同,但是不能靠返回类型来判断。
特点:1、位于同一个类中;2、函数的名字必须相同;3、形参列表不同可能是参数个数 or 类型 or 顺序 不同,返回值无要求
特殊情况:若某一个重载版本的函数前面有virtual修饰,则表示它是虚函数。但它也是属于重载的一个版本
作用效果和原理:编译器根据函数不同的参数表将函数体与函数调用进行早绑定。重载与多态无关,只是一种语言特性,与面向对象无关。
3、重写override:派生类重定义基类的虚函数,即会覆盖基类的虚函数
特点:1、不在同一个作用域,分别位于基类、派生类;2、函数名、形参列表、返回值相同;3、基类的函数是virtual
特殊情况:若派生类重写的虚函数属于一个重载版本,则该重写的函数会隐藏基类中与虚函数同名的其他函数。
故:
在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。 是对的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询