Étant donné un objet PropertyInfo, comment puis-je vérifier que le setter de la propriété est public ?
+1 : C'est mieux que GetSetMethod().IsPublic
il fonctionne également lorsque la propriété a pas de setter.
Étant donné un objet PropertyInfo, comment puis-je vérifier que le setter de la propriété est public ?
Vérifiez ce que vous obtenez en retour de GetSetMethod
:
MethodInfo setMethod = propInfo.GetSetMethod();
if (setMethod == null)
{
// The setter doesn't exist or isn't public.
}
Ou, pour donner une autre tournure à l'histoire La réponse de Richard :
if (propInfo.CanWrite && propInfo.GetSetMethod(/*nonPublic*/ true).IsPublic)
{
// The setter exists and is public.
}
Notez que si tout ce que vous voulez faire est de définir une propriété, tant qu'elle a un setter, vous n'avez pas à vous soucier de savoir si le setter est public. Vous pouvez simplement l'utiliser, public ou privé :
// This will give you the setter, whatever its accessibility,
// assuming it exists.
MethodInfo setter = propInfo.GetSetMethod(/*nonPublic*/ true);
if (setter != null)
{
// Just be aware that you're kind of being sneaky here.
setter.Invoke(target, new object[] { value });
}
Les propriétés .NET sont en fait une enveloppe autour d'une méthode get et set.
Vous pouvez utiliser le GetSetMethod
sur le PropertyInfo, renvoyant le MethodInfo faisant référence au setter. Vous pouvez faire la même chose avec GetGetMethod
.
Ces méthodes renverront un résultat nul si le récepteur/récepteur est non public.
Le code correct ici est :
bool IsPublic = propertyInfo.GetSetMethod() != null;
public class Program
{
class Foo
{
public string Bar { get; private set; }
}
static void Main(string[] args)
{
var prop = typeof(Foo).GetProperty("Bar");
if (prop != null)
{
// The property exists
var setter = prop.GetSetMethod(true);
if (setter != null)
{
// There's a setter
Console.WriteLine(setter.IsPublic);
}
}
}
}
Vous devez utiliser la méthode sous-jacente pour déterminer l'accessibilité, à l'aide des éléments suivants PropertyInfo.GetGetMethod() o PropertyInfo.GetSetMethod() .
// Get a PropertyInfo instance...
var info = typeof(string).GetProperty ("Length");
// Then use the get method or the set method to determine accessibility
var isPublic = (info.GetGetMethod(true) ?? info.GetSetMethod(true)).IsPublic;
Notez toutefois que le getter et le setter peuvent avoir des accessibilités différentes, par exemple :
class Demo {
public string Foo {/* public/* get; protected set; }
}
Vous ne pouvez donc pas supposer que le getter et le setter auront la même visibilité.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.