背景
找不到属性集方法。get只读属性用了反射设置setvalue肯定报错
报错分析
实体类成员,进行反射时,只读成员是无法进行设置值的。
下面图中,update_time设置了get只读,只能获取值,无法设置值,因此在进行反射设置值时就报错了。
get和set
在c#中,get 和 set 是用于定义属性(properties)的关键字。
1.get
用于获取属性的值。当代码尝试访问属性的值时,会调用 get 方法来返回该值。
2.set
用于设置属性的值。当代码尝试给属性赋值时,会调用 set 方法来存储该值。
通过使用属性,可以控制对类的字段(fields)的访问,使其更加安全和可控。例如,可以在 set 方法中添加验证逻辑,以确保属性值符合特定的条件。
下面是一个简单的示例,展示了如何在c#中使用 get 和 set:
public class person
{
private string name;
// 定义属性 name,具有 get 和 set 方法
public string name
{
get
{
return name; // 获取属性值
}
set
{
if (!string.isnullorempty(value)) // 设置属性值前进行验证
{
name = value; // 设置属性值
}
else
{
throw new argumentexception("name cannot be null or empty");
}
}
}
}
反射用法
在c#中,反射(reflection)是一种强大的技术,允许在运行时获取类型的信息,并动态操作它们的成员(如属性、方法、字段等)。使用反射,可以在不知道具体类型的情况下,仍能够调用类型的成员、创建对象或修改对象的行为。主要的反射类都位于 system.reflection 命名空间中。
以下是一些反射技术常见的用途和功能:
1.获取类型信息
可以通过反射获取类型的名称、命名空间、方法、属性、字段等详细信息。例如,使用 typeof 操作符或 gettype() 方法来获取类型的 type 对象。
2.动态创建对象
可以使用反射来动态创建类的实例。通过 activator.createinstance 方法或者 type 类的 getconstructor 方法结合 invoke 方法,可以在运行时创建对象。
3.调用成员
可以使用反射来调用类的方法、获取和设置属性的值,以及访问和修改字段。这些操作可以通过 getmethod、invoke、getproperty、setvalue 等方法来完成。
4.获取和设置字段值
可以通过反射读取和修改类的字段值,即使字段是私有的也可以。
5.查找和调用特定类型的方法
可以根据方法的名称、参数类型等信息,通过反射动态调用特定的方法。
6.检查和应用属性和特性
可以通过反射读取类、方法或属性上的自定义特性(attributes),并根据特性中的元数据来调整程序行为。
相关文章
【c#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有
【c#】未能加载文件或程序集“cefsharp.core.runtime.dll”或它的某一个依赖项。找不到指定的模块。
【c#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法
【c#】.net core 6.0 apicontroller,api控制器方法,api接口以实体类作为接收参数应该注意的点
【c#】 sorteddictionary,查找字典中是否存在给定的关键字
【c#】.net core 6.0 mvc返回jsonresult显示api接口返回值不可被json反序列化
【c#】.net core 6.0 使用第三方日志插件log4net,配置文件详细说明
【c#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇
【c#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇
发表评论