Учитывая объект PropertyInfo, как я могу проверить, что средство настройки является общедоступным?Как проверить, является ли свойство setter общедоступным
ответ
Проверьте, что вы получите обратно от GetSetMethod
:
MethodInfo setMethod = propInfo.GetSetMethod();
if (setMethod == null)
{
// The setter doesn't exist or isn't public.
}
Или, различные спина на Richard's answer:
if (propInfo.CanWrite && propInfo.GetSetMethod(/*nonPublic*/ true).IsPublic)
{
// The setter exists and is public.
}
Примечание что если все, что вы хотите сделать, это установить свойство, пока оно имеет сеттер, вы не активируете y должен заботиться о том, является ли сеттер общедоступным. Вы можете просто использовать его, общественный или частные:
// 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 });
}
Свойства .NET - действительно оболочка оболочки вокруг метода get и set.
Вы можете использовать метод GetSetMethod
в PropertyInfo, возвращая MethodInfo, ссылаясь на установщик. Вы можете сделать то же самое с GetGetMethod
.
Эти методы возвращают значение null, если геттер/сеттер не является общедоступным.
Правильный код здесь:
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);
}
}
}
}
Вы должны использовать метод сошка для определения доступности, используя PropertyInfo.GetGetMethod() или 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;
Однако следует отметить, что добытчик & сеттер может иметь разные возможности доступа, например .:
class Demo {
public string Foo {/* public/* get; protected set; }
}
Таким образом, вы не можете предположить, что геттер и сеттер будет иметь ту же видимость.
- 1. Как проверить, является ли IP общедоступным прокси
- 2. Как проверить, является ли сообщение общедоступным на facebook
- 3. , как проверить, является ли свойство объекта нулевым
- 4. Как переопределить свойство setter?
- 5. Как проверить URL-адрес общедоступным?
- 6. Определите, является ли адрес электронной почты «общедоступным»
- 7. Является ли VisualSVN Server общедоступным сервером SVN?
- 8. Почему InitializeComponent является общедоступным
- 9. Проверьте, является ли класс общедоступным или приватным
- 10. Является ли Heroku Git Repo общедоступным?
- 11. Является ли TDBCtrlGrid общедоступным компонентом, поддерживающим данные?
- 12. MainActivity не является общедоступным
- 13. Bitmap() не является общедоступным
- 14. Открытое свойство TypeScript Setter
- 15. Установить свойство setter
- 16. Как проверить, исключило ли свойство класса исключение
- 17. Как проверить, является ли @NSManaged свойство нулевым в быстром?
- 18. Как проверить, является ли свойство типа Entity Framework Nullable
- 19. Устанавливает ли свойство свойства свойство set setter первого свойства?
- 20. Можно ли проверить, имеет ли свойство Setter, который ссылается на другой объект?
- 21. Как я могу проверить, можно ли записывать свойство bean?
- 22. свойство python getter/setter confusion
- 23. Как вы определяете, является ли домен в Freebase общедоступным?
- 24. Как определить, является ли общедоступным IP-адрес устройства Android.
- 25. Как найти, является ли сертификат приватным сертификатом или общедоступным сертификатом
- 26. Как вы называете свойство setter по имени?
- 27. Как узнать, является ли свойство массивом?
- 28. Как проверить, является ли метод общедоступным в Java во время выполнения
- 29. Python свойство setter/getter reference
- 30. Swizzle swift свойство getter/setter
+1: Это лучше, чем 'GetSetMethod(). IsPublic' : он также работает, когда свойство имеет * no * setter. – Ani
Спасибо @ Dan Tao. Это лучший ответ: upvoted! –
Спасибо @ Dan Tao. :) –