Je me demande pourquoi, lorsque vous attribuez un attribut System.Diagnostics.Conditional ("DEBUG") à une méthode virtuelle dans une classe de base, vous n'obtenez pas d'erreurs de compilation sur les classes dérivées substituez cette même méthode virtuelle mais ne possédez pas l'attribut conditionnel lorsque la condition n'est pas remplie. Exemple:Attribut conditionnel sur une fonction virtuelle
public class MyBaseClass
{
[System.Diagnostics.Conditional("DEBUG")]
public virtual void Test()
{
//Do something
}
}
public class MyDerivedClass : MyBaseClass
{
public override void Test()
{
//Do something different
}
}
Il semble que lorsque DEBUG n'est pas défini, le conditionnel serait essentiellement faire une sitation lorsque la méthode de remplacement ne peut pas exister parce qu'il n'y a pas de fonction virtuelle dans la sortie de IL réelle. Pourtant, dans mes tests, le compilateur semble générer le code d'une manière ou d'une autre. Est-ce que le conditionnel jette simplement l'IL pour le corps de la fonction mais n'apporte pas de vrais changements à la signature de la classe?
tangentiellement: le déplacement de l'attribut conditionnel de la classe virtuelle de la classe de base vers la classe dérivée entraîne une erreur de compilateur. Cela est logique compte tenu du comportement détaillé dans la réponse. – devgeezer