6
votes

PropriétéInfo.GetSetMethod (True) Non retour à la méthode des propriétés de la classe de base

J'ai suivi du programme de test: xxx

et il montre "null" si je l'exécute. Si je déplace la définition de la propriété sur la classe FOO, alors je travaille comme prévu. Est-ce un bogue dans .NET?


3 commentaires

Veuillez expliquer le vote en panne, question valable.


J'ai changé le titre. Ne vous attendez jamais à un bug, mais suspectez votre compréhension et faites des titres de question lisibles pour les autres afin qu'ils comprennent si la question est intéressante pour eux. BTW: Je n'ai pas voté, mais je suppose que cela a à voir avec le titre.


Désolé pour le titre pas informatif. Mais votre seul n'était pas correct aussi. J'ai changé pour corriger un.


3 Réponses :


3
votes

Modifier

Désolé,

Vous êtes correct dans votre commentaire ci-dessous. L'erreur est différente. Il n'y a pas de méthode définie dans la classe FOO C'est pourquoi elle ne renvoie pas une méthode. Ce n'est pas là car il est privé dans la classe de base.


4 commentaires

Non, GetProperty lui-même retourne la valeur correcte - sinon il y aura une exception ici. La méthode GetSetMethod ne renvoie pas la valeur valide.


Boolean Param de GetSetSmethod est vrai, cela signifie que le séchoir privé devrait également être renvoyé. Il n'y a rien dans l'article MSDN pour GetSetMethod sur le travail de cette méthode avec des accessoires de types de base.


Mais la réponse semble avoir raison, si vous modifiez la visibilité de private à protégé, cela fonctionne. Vous pouvez faire un message sur Microsoft Connect de ce problème.


Une méthode privée d'une classe de base n'est jamais disponible dans la classe dérivée. Peu importe ce que vous passez booléen.



5
votes

Ceci est par conception. Le constructeur de propriétés de FOOBASE n'est pas accessible dans la classe FOO, quel que soit votre essai: xxx

vous devrez utiliser typeof (foobase) .geproperty ("Prop") dans votre code.


0 commentaires

8
votes

Vous pouvez y parvenir en obtenant la propriétéInfo sur le type de déclaration de la propriété, la méthode d'extension simple pourrait être ...

class Program
{
    static void Main(string[] args)
    {
       MethodInfo setMethod = typeof(Foo)
                                 .GetProperty("Prop")
                                 .GetSetMethodOnDeclaringType();
       if (setMethod == null)
            Console.WriteLine("NULL");
        else
            Console.WriteLine(setMethod.ToString());
         Console.ReadKey();
    }
}


0 commentaires