gpt4 book ai didi

c# - 在派生类型中找不到属性集方法

转载 作者:可可西里 更新时间:2023-11-01 03:04:23 28 4
gpt4 key购买 nike

.NET Reflection set private property 中所讨论可以使用私有(private) setter 设置属性。但是当在基类中定义属性时,将抛出 System.ArgumentException:“找不到属性设置方法”。

一个例子可以是:

using System;
class Test
{
public DateTime ModifiedOn { get; private set;}
}

class Derived : Test
{
}

static class Program
{
static void Main()
{
Derived p = new Derived ();
typeof(Derived).GetProperty("ModifiedOn").SetValue(
p, DateTime.Today, null);
Console.WriteLine(p.ModifiedOn);
}
}

有谁知道解决这种情况的方法吗?

编辑: 给出的示例是对问题的简单说明。在现实场景中,我不知道该属性是在基类中定义的,还是在基类的基类中定义的。

最佳答案

我有一个类似的问题,我的私有(private)属性(property)是在基类中声明的。我使用 DeclaringType 来获取定义属性的类的句柄。

using System;
class Test
{
public DateTime ModifiedOn { get; private set;}
}

class Derived : Test
{
}

static class Program
{
static void Main()
{
Derived p = new Derived ();

PropertyInfo property = p.GetType().GetProperty("ModifiedOn");
PropertyInfo goodProperty = property.DeclaringType.GetProperty("ModifiedOn");

goodProperty.SetValue(p, DateTime.Today, null);

Console.WriteLine(p.ModifiedOn);
}
}

关于c# - 在派生类型中找不到属性集方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10041458/

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