Masz dwie opcje:
- podjęciu właściwości
public
zamiast private
.
- Użyj
reflection
, aby uzyskać dostęp do właściwości.
Polecam używanie (1).
Należy pamiętać, że trzeba także zainicjować item.thumbnail
:
Item item = new Item();
item.thumbnail = new thumbnail();
Jeśli wymagają że nieruchomość thumbnail
jest zawsze ustawiony, można dodać konstruktora klasy Item
następująco (gdzie mam również usunięte seter na miniaturze, kapitalizowane nazwę klasy Thumbnail
nazwy klas powinny rozpocząć się wielką literą).
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; }
}
użyciu odbicia do pobierania i ustawiania prywatnych właściwości
użyć refleksji, oto przykład.Biorąc pod uwagę klasę tak:
public class Test
{
private int PrivateInt
{
get;
set;
}
}
Można ustawić i uzyskać jego PrivateInt
właściwość tak:
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).
Uproszczenie z metod pomocniczych
Można by uprościć to przez pisanie kilka ogólnych metod pomocniczych, takich jak:
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);
}
Wtedy przykład z klasą Test
byłoby tak:
Test test = new Test();
SetPrivateProperty(test, "PrivateInt", 42);
int value = GetPrivateProperty<int>(test, "PrivateInt");
Czy istnieje określony powód, dla którego zadeklarowałeś je jako "prywatne"? Czy masz zamiar, aby po ich napisaniu nie można było zmienić? –
Utwórz dla nich właściwości publiczne. usuń get & set, kliknij prawym przyciskiem myszy i wykonaj refactor-> encapsulate field, a to sprawi, że będziesz publicznie otrzymywać/ustawiać. Alternatywnie możesz stworzyć konstruktora w miniaturze, aby ustawić te elementy. Na koniec, jeśli chcesz tylko, aby element miał dostęp do miniatury i masz tylko te 3 właściwości, po prostu utwórz strukturę wewnątrz elementu z trzema ciągami, zamiast oddzielnej klasy dla trzech małych ciągów. tylko moje 2 centy, powodzenia w twoim projekcie! – Chris