У вас есть два варианта:
- сделать свойство
public
вместо private
.
- Используйте
reflection
для того, чтобы получить доступ к объектам недвижимости.
Я рекомендую использовать (1).
Обратите внимание, что вам также необходимо инициализировать item.thumbnail
:
Item item = new Item();
item.thumbnail = new thumbnail();
Если требует что thumbnail
свойства всегда имеет значение, можно добавить конструктор класса Item
следующим образом (где я также удалил сеттер для миниатюры и капитализированные имя Thumbnail
класса имена классов должны начинаться с прописной буквы):.
public class Item
{
public Item(Thumbnail thumbnail)
{
if (thumbnail == null)
throw new ArgumentNullException("thumbnail");
this.thumbnail = thumbnail;
}
public string description { get; set; }
public string item_uri { get; set; }
public thumbnail thumbnail { get; }
}
с помощью отражения, чтобы получить и установить личные свойства
использовать отражение, вот пример.Учитывая класс, как это:
public class Test
{
private int PrivateInt
{
get;
set;
}
}
Вы можете установить и получить его свойство PrivateInt
так:
Test test = new Test();
var privateInt = test.GetType().GetProperty("PrivateInt", BindingFlags.Instance | BindingFlags.NonPublic);
privateInt.SetValue(test, 42); // Set the property.
int value = (int) privateInt.GetValue(test); // Get the property (will be 42).
Simplify с вспомогательными методами
Вы могли бы упростить это, написав несколько общих вспомогательных методов:
public static T GetPrivateProperty<T>(object obj, string propertyName)
{
return (T) obj.GetType()
.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(obj);
}
public static void SetPrivateProperty<T>(object obj, string propertyName, T value)
{
obj.GetType()
.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(obj, value);
}
Тогда пример с Test
класса будет выглядеть так:
Test test = new Test();
SetPrivateProperty(test, "PrivateInt", 42);
int value = GetPrivateProperty<int>(test, "PrivateInt");
Есть ли конкретная причина, по которой вы объявили их «частными»? Является ли ваше намерение, что, как только они будут написаны, они не могут быть изменены? –
Сделать общедоступной недвижимостью для них. удалите get & set, щелкните правой кнопкой мыши и сделайте refactor-> encapsulate field, и это сделает вас общедоступным get/set. В качестве альтернативы вы можете создать конструктор в миниатюре, чтобы установить эти элементы. Наконец, если вы хотите, чтобы элемент имел доступ к миниатюре, и у вас есть только эти 3 свойства, просто создайте структуру внутри элемента тремя вашими строками, а не отдельным классом для трех маленьких строк. просто мои 2 цента, удачи в вашем проекте! – Chris