你有两个选择:
- 制作属性
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).
使用辅助方法进行简化
您可以通过编写几个通用辅助方法来简化这一点,如下所示:
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");