Adresse originale : Cliquez pour ouvrir le lien
Cela a de nombreuses significations. Cela signifie, par exemple, que l'introduction d'un nouveau membre dans une classe de base portant le même nom qu'un membre d'une classe dérivée est entièrement prise en charge en C# et n'entraînera pas de comportement inattendu. Cela signifie également que la classe doit déclarer explicitement si une méthode doit remplacer une méthode héritée ou être une nouvelle méthode qui cache une méthode héritée avec un nom similaire.
En C#, une classe dérivée peut contenir des méthodes portant les mêmes noms que les méthodes de la classe de base.
Les méthodes de classe de base doivent être définies comme virtuelles.
Si une méthode dans une classe dérivée n'est pas précédée du mot-clé new ou override, le compilateur émettra un avertissement et la méthode apparaîtra comme si elle existait nouveau Effectuez les mêmes opérations que les mots-clés.
Si une méthode dans une classe dérivée est précédée du mot clé new, la méthode est définie comme indépendante de la méthode dans la base classe .
Si une méthode dans une classe dérivée est précédée du mot-clé override, l'objet de la classe dérivée appellera la méthode au lieu de appeler les méthodes de la classe Base.
Vous pouvez utiliser le mot-clé base pour appeler les méthodes de classe de base à partir d'une classe dérivée. Les mots-clés
override, virtuel et nouveau peuvent également être utilisés pour les attributs et les index. appareils et événements.
Si une méthode est déclarée virtuelle, toute classe qui hérite de cette méthode peut implémenter sa propre version. Pour rendre une méthode virtuelle, vous devez utiliser le modificateur virtuel dans la déclaration de méthode de la classe de base. Ensuite, la classe dérivée peut remplacer la méthode virtuelle de base à l'aide du mot-clé override, ou utiliser le mot-clé new pour masquer la méthode virtuelle dans la classe de base. Si ni le mot-clé override ni le mot-clé new ne sont spécifiés, le compilateur émettra un avertissement et les méthodes de la classe dérivée masqueront les méthodes de la classe de base.
GraphicsClass est la suivante :
C#
class GraphicsClass { public virtual void DrawLine() { } public virtual void DrawPoint() { } }
Votre entreprise utilise cette classe, Et vous l'utilisez pour dériver votre propre classe lors de l'ajout de nouvelles méthodes :
C#
class YourDerivedGraphicsClass : GraphicsClass { public void DrawRectangle() { } }
Votre application fonctionne correctement jusqu'à ce que la société A publie une nouvelle version de GraphicsClass, similaire au code suivant :
C#
class GraphicsClass { public virtual void DrawLine() { } public virtual void DrawPoint() { } public virtual void DrawRectangle() { } }
Au début, il n'y avait aucun problème. La nouvelle version reste compatible binaire avec l'ancienne version. Tout logiciel déployé continuera à fonctionner normalement même si de nouvelles classes sont installées sur le système informatique où réside le logiciel. Dans votre classe dérivée, tous les appels existants à la méthode DrawRectangle continueront à référencer votre version.
Cet avertissement vous rappelle que vous devez réfléchir à la manière dont vous souhaitez que la méthode DrawRectangle fonctionne dans votre application.
Si vous souhaitez que votre méthode remplace la nouvelle méthode de classe de base, veuillez utiliser le mot-clé override :
C#
class YourDerivedGraphicsClass : GraphicsClass { public override void DrawRectangle() { } }
派生自 YourDerivedGraphicsClass 的对象仍可以使用基关键字访问DrawRectangle 的基类版本
C#
base.DrawRectangle();
为了避免这两个方法之间发生混淆,可以重命名您的方法。 这可能很耗费时间且容易出错,而且在某些情况下并不可行。 但是,如果您的项目相对较小,则可以使用 Visual Studio 的重构选项来重命名方法。 有关更多信息,请参见重构类和类型(类设计器)。
或者,也可以通过在派生类定义中使用关键字 new 来防止出现该警告:
C#
class YourDerivedGraphicsClass : GraphicsClass { public new void DrawRectangle() { } }
这是默认行为。
重写和方法选择
下面的方法将是兼容的:
C#
public class Derived : Base { public override void DoWork(int param) { } public void DoWork(double param) { } }
重写方法不被视为是在类上进行声明的,而是在基类上声明的方法的新实现。 仅当 C# 编译器无法将方法调用与 Derived 上的原始方法匹配时,它才尝试将该调用与具有相同名称和兼容参数的重写方法匹配。 例如:
C#
int val = 5; Derived d = new Derived(); d.DoWork(val); // Calls DoWork(double).
有两种方法可以避免此情况。 首先,避免将新方法声明为与虚方法同名。 其次,可以通过将 Derived 的实例强制转换为 Base 来使 C# 编译器搜索基类方法列表,从而使其调用虚方法。 由于是虚方法,因此将调用 Derived 上的 DoWork(int) 的实现。 例如:
C#
((Base)d).DoWork(val); // Calls DoWork(int) on Derived.
有关 new 和 override的更多示例,请参见 了解何时使用 Override 和 New 关键字(C# 编程指南)。
以上就是使用 Override 和 New 关键字进行版本控制(C# 编程指南)的内容,更多相关内容请关注PHP中文网(www.php.cn)!