gpt4 book ai didi

c# - 如何访问对象的某些(私有(private))属性?

转载 作者:可可西里 更新时间:2023-11-01 08:42:59 25 4
gpt4 key购买 nike

我有

public class Item
{
public string description { get; set; }
public string item_uri { get; set; }
public thumbnail thumbnail { get; set; }
}

public class thumbnail 
{

private string url { get; set; }
private string width { get; set; }
private string height { get; set; }
}

如果我像这样创建一个Item对象

 Item item = new Item ();

如何访问变量 urlwidthheight

谢谢!

最佳答案

你有两个选择:

  1. 将属性设置为public 而不是 private
  2. 使用反射访问属性。

我建议使用 (1)。

注意你还需要初始化item.thumbnail:

Item item = new Item ();
item.thumbnail = new thumbnail();

如果您要求始终设置thumbnail 属性,您可以向类Item 添加一个构造函数,如下所示(我也有删除缩略图的 setter 并将 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; }
}

使用反射获取和设置私有(private)属性

要使用反射,这里有一个例子。给定一个这样的类:

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");

关于c# - 如何访问对象的某些(私有(private))属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16883775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com