Sono disponibili due opzioni:
- rendere la proprietà
public
invece di private
.
- Usa
reflection
per accedere alle proprietà.
Si consiglia di utilizzare (1).
Si noti che è anche necessario inizializzare item.thumbnail
:
Item item = new Item();
item.thumbnail = new thumbnail();
Se bisogno che la proprietà thumbnail
è sempre impostata, si potrebbe aggiungere un costruttore di classe Item
come segue (dove ho anche tolto il setter per miniature e capitalizzato il nome della classe Thumbnail
nomi di classe devono iniziare con una lettera maiuscola):.
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; }
}
utilizzando la riflessione per ottenere e impostare le proprietà private
Per utilizzare riflessione, ecco un esempio.Data una classe come questa:
public class Test
{
private int PrivateInt
{
get;
set;
}
}
È possibile impostare e ottenere la proprietà PrivateInt
in questo modo:
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).
Semplificare con metodi di supporto
Si potrebbe semplificare questo scrivendo un paio di metodi di supporto generici in questo modo:
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);
}
Poi l'esempio con la classe Test
sarebbe come questo:
Test test = new Test();
SetPrivateProperty(test, "PrivateInt", 42);
int value = GetPrivateProperty<int>(test, "PrivateInt");
C'è un motivo specifico per cui li dichiarati come 'private'? Il tuo intento è che una volta scritti non possano essere modificati? –
Crea proprietà pubbliche per loro. rimuovere il get & set, fare clic destro e fare refactor-> incapsulare campo e ti farà un pubblico get/set .. In alternativa è possibile fare un costruttore in miniatura per impostare questi elementi. Infine, se vuoi che l'elemento abbia accesso alla miniatura e tu abbia solo quelle 3 proprietà, crea una struttura all'interno delle tre stringhe piuttosto che una classe separata per tre piccole stringhe. solo i miei 2 centesimi, buona fortuna per il tuo progetto! – Chris