Gestion des versions avec remplacement et nouveaux mots-clés (Guide de programmation C#)

黄舟
Libérer: 2017-02-16 10:58:17
original
1523 Les gens l'ont consulté

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() { }
}
Copier après la connexion


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() { }
}
Copier après la connexion


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() { }
}
Copier après la connexion


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() { }
}
Copier après la connexion


 派生自 YourDerivedGraphicsClass 的对象仍可以使用基关键字访问DrawRectangle 的基类版本

C#


base.DrawRectangle();
Copier après la connexion


 为了避免这两个方法之间发生混淆,可以重命名您的方法。 这可能很耗费时间且容易出错,而且在某些情况下并不可行。 但是,如果您的项目相对较小,则可以使用 Visual Studio 的重构选项来重命名方法。 有关更多信息,请参见重构类和类型(类设计器)。

或者,也可以通过在派生类定义中使用关键字 new 来防止出现该警告:

C#


class YourDerivedGraphicsClass : GraphicsClass
{    public new void DrawRectangle() { }
}
Copier après la connexion


 这是默认行为。

重写和方法选择

 下面的方法将是兼容的:

C#


public class Derived : Base
{    public override void DoWork(int param) { }    public void DoWork(double param) { }
}
Copier après la connexion


 重写方法不被视为是在类上进行声明的,而是在基类上声明的方法的新实现。 仅当 C# 编译器无法将方法调用与 Derived 上的原始方法匹配时,它才尝试将该调用与具有相同名称和兼容参数的重写方法匹配。 例如:

C#



int val = 5;
Derived d = new Derived();
d.DoWork(val);  // Calls DoWork(double).
Copier après la connexion


 有两种方法可以避免此情况。 首先,避免将新方法声明为与虚方法同名。 其次,可以通过将 Derived 的实例强制转换为 Base 来使 C# 编译器搜索基类方法列表,从而使其调用虚方法。 由于是虚方法,因此将调用 Derived 上的 DoWork(int) 的实现。 例如:

C#


((Base)d).DoWork(val);  // Calls DoWork(int) on Derived.
Copier après la connexion


有关 new 和 override的更多示例,请参见 了解何时使用 Override 和 New 关键字(C# 编程指南)。

 以上就是使用 Override 和 New 关键字进行版本控制(C# 编程指南)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!