- 浏览: 233062 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
net_liu:
zxptian 写道楼主能把TransferFiles也贴出来 ...
c# Socket 文件的传输 -
zxptian:
楼主能把TransferFiles也贴出来分享下吗?
c# Socket 文件的传输
什么是反射?
反射就是在运行时,动态获取对象信息的方法。比如:运行时获得对象有哪些属性,方法,委托等。
反射的作用?
能够实现运行时,动态调用对象的方法,以及动态设置、获取属性值等。
反射的示例:
using System; using System.Reflection; namespace CS_Test { public class MyStudent { private string sName; public string SName { get { return sName; } set { sName = value; } } private int sAge; public int SAge { get { return sAge; } set { sAge = value; } } } class Test_Attribute { [STAThread] static void Main(string[] args) { MyStudent stu1 = new MyStudent(); stu1.SName = "刘德华"; stu1.SAge = 40; // 获得所有属性 PropertyInfo[] pros = stu1.GetType().GetProperties(); // 显示所有属性值 foreach (PropertyInfo pro in pros) Console.WriteLine(pro.Name+":"+pro.GetValue(stu1,null)); //更改stu1对象的SAge值 stu1.GetType().GetProperty("SAge").SetValue(stu1, 30, null); // 显示所有属性值 foreach (PropertyInfo pro in pros) Console.WriteLine(pro.Name+":"+pro.GetValue(stu1, null)); } } }
(二)关于特性
什么是 Attribute?
它是对运行时的对象或对象的属性、方法、委托等进行描述的类。
Attribute 的作用?
用于在运行时,描述你的代码或者影响你的程序的行为。
注意:
既然Attribute 是类,那么它的定义与定义类一样。
唯一不同的就是,自定义Attribute 类必须继承于System.Attribute 空间。
特性的示例:
//描述数据库字段的 Attribute public class DataFieldAttribute : Attribute { public DataFieldAttribute(string fieldName,string fieldType) { this._fieldName = fieldName; this._fieldType = fieldType; } // 数据库字段名 private string _fieldName; public string FieldName { get { return _fieldName; } set { _fieldName = value; } } // 数据库字段类型 private string _fieldType; public string FieldType { get { return _fieldType; } set { _fieldType = value; } } }
通过自定义Attribute,我们定义了类属性和数据库字段的一一对应关系,于是对MyStudent 类的Name、Age 属性都加上Attribute 的描述,指定他们对应的数据库字段名以及类型。
代码更改如下:
public class MyStudent { private string _name; //使用“特性”描述对应的数据库字段名、类型 [DataFieldAttribute("SName", "varchar")] public string Name { get { return _name; } set { _name = value; } } private int _age; [DataFieldAttribute("SAge", "int")] public int Age { get { return _age; } set { _age = value; } } }
(三)ORM 映射规则的定义
给实体类增加DataFieldAttribute 的描述,其实就是增加了O(对象)/ R(关系数据库)的映射规则。
下面我们就通过反射的方法实现:在运行时动态获取O/R Mapping 的映射规则:
显示结果: 实体类的属性名:Name -> 数据库字段名:SName 接下来的工作就是:怎样根据这种方法动态地从对象中获取映射规则,然后动态构造Insert、Update、Delete 等 SQL 语句。这就是实现自己的ORM 的原理。 这里的代码仅仅是举例,而要真正实现一个ORM,我们还需要考虑的很多,比如: static void Main(string[] args)
{
MyStudent stu1 = new MyStudent();
stu1.Name = "刘德华";
stu1.Age = 40;
//通过反射的方法来动态获取此映射规则
PropertyInfo[] infos = stu1.GetType().GetProperties();
object[] objs_fieldAttr = null;
foreach (PropertyInfo info in infos)
{
// GetCustomAttributes:
// 返回实体对象中每个属性对应的“特性”信息(数据库字段名、类型)
objs_fieldAttr = info.GetCustomAttributes(
typeof(DataFieldAttribute), false);
if (objs_fieldAttr != null)
{
Console.Write("实体类的属性名:" + info.Name);
Console.Write(" -> 数据库字段名:");
Console.WriteLine(((DataFieldAttribute)objs_fieldAttr[0]).FieldName);
}
}
}
实体类的属性名:Age -> 数据库字段名:SAge
1、实体类对应于哪张数据库表?
2、数据库表中的 PK 和 FK(如果有的话)怎么表示?
……
发表评论
-
List转DataTable(反射)
2012-02-06 10:48 2741List转DataTable(反射) // ... -
DataTable转泛型
2012-01-31 17:39 1279DataTable转泛型 public clas ... -
利用鼠标钩子将鼠标中键转为左键
2011-05-04 13:50 1646利用鼠标钩子将鼠标中键转为左键 鼠标 ... -
C# 命名规范
2011-04-01 13:32 1971C# 命名规范 文章分类:.net编程 ... -
VS2008 快捷键大全
2011-04-01 13:30 916VS2008 快捷键大全[转帖] 文章分类 ... -
C# 中的委托和事件
2011-04-01 13:26 1287缩略显示 C# 中的委托和事件 文章 ... -
C#Winform限制Textbox只能输入数字
2011-04-01 13:20 7480C#Winform限制Textbox ... -
C# 跳转语句(break,continue,goto,return,throw)
2011-04-01 12:38 3435C# 跳转语句(break,continue,goto,r ... -
C#窗体固定在桌面上
2010-11-19 10:25 1651[DllImport("user32.dll& ... -
if-else 都输出的方法
2010-10-12 11:44 1308if-else 都输出的方法 if (new Func< ... -
发一个接口做参数的例子
2010-08-06 08:48 958发一个接口做参数的例子 回头接口 using System ... -
C#中使用正则表达式
2010-08-04 13:39 1338C#中的正则表达式包含 ... -
C#的几个技巧
2010-08-04 13:35 8501.如果可能尽量使用接 ... -
反射动态调用类成员
2010-08-04 13:30 983使用反射动态调用类成员,需要Type类的一个方法:Invoke ... -
在vs2005中发送邮件
2010-08-03 16:14 1147在vs2005中发送邮件的方法如下: ... -
XML数据排序
2010-06-30 14:20 3407根据XML数据的Index 来进行排序 方法一: ... -
程序动态升级版本
2010-06-30 10:00 1000C#实现程序动态升级版本。通过反射获取本地版本,然后跟服务器中 ... -
将DataGridView 数据导出到Excel
2010-06-25 15:46 5095/// <summary> ... -
将Excel导入到Oracle
2010-06-25 15:39 5418private void btnInsert_Click(o ... -
序列化与反序列化
2010-06-24 15:44 919多个对象序列化和反序列化 namespace Dome { ...
相关推荐
在编程领域,反射技术和简单工厂模式是两种非常重要的设计概念,它们在软件开发中有着广泛的应用。接下来,我们将深入探讨这两个知识点。 首先,让我们来理解什么是反射技术。反射是Java(以及其他支持反射机制的...
采用超弱反射光纤光栅(FBG)结合光频域反射技术(OFDR),实现了大容量、高空间分辨率的准分布式光纤光栅传感网络的解调。通过对拍频信号分离的优化和非线性矫正,利用拍频信号的频谱信息,实现了高空间分辨率的光纤...
在.NET框架中,反射是一种强大的工具,它允许程序在运行时检查自身并...同时,`AssiamlyTest`这样的示例资源对于学习和实践反射技术是非常宝贵的。理解并熟练运用反射,将极大地提升我们的编程能力和解决问题的效率。
通过学习和理解框架的概念,以及如何利用反射技术开发框架,开发者能够更好地掌握Java编程的高级技巧,提高软件开发的生产力。在实际项目中,熟练运用各种框架可以极大地提升开发效率,同时也能保证软件的质量和可...
在这个“JDBC_Java反射技术入门”资源中,初学者可以了解到如何使用Java进行数据库操作的基础知识,包括连接数据库、执行SQL语句、处理查询结果等。 1. **JDBC基础**: - **加载驱动**:在使用JDBC之前,我们需要...
Java反射技术是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在JSP(Java Server Pages)中,反射技术的应用可以帮助开发者在运行时动态地获取类的信息,...
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
### C# 反射技术应用详解 #### 一、引言 反射是.NET框架的核心机制之一,它允许程序在运行时动态地获取类型信息并调用类型的方法或属性。这为开发人员提供了极大的灵活性,尤其是在处理未知类型的对象时。本文将...
Java反射技术是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够动态调用方法和创建对象。这个技术的核心在于`java.lang.reflect`包中的类,如`Class`、`...
Java反射技术是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象以及它们的方法和属性。通过反射,开发者能够获取关于类的信息,并且能够在运行时动态地创建对象和调用方法,这为编程带来...
Java反射技术浅谈 Java反射技术是一种强大的技术,它允许Java程序访问、检测和修改它自己的状态或行为。通过反射,Java程序可以加载一个运行时才知道名称的类,获取其完整的内部信息,并创建其对象,或者对其属性...
本压缩包文件“c# vs2008 反射技术演示代码.rar”显然是为了帮助初学者理解并掌握这一关键技术。 首先,我们需要了解什么是反射。在.NET Framework中,每一个类型(包括类、接口、结构等)都有一个与之对应的Type...
Java反射技术指的是在运行时动态地获取类的信息、调用对象的方法、操作类的属性等能力。通过反射,程序可以在运行时检查类、实例化对象、调用方法、获取和设置属性,甚至可以动态修改类的结构。 Java反射技术的核心...
常用的技术中的反射技术,上面有很详细的讲解
### Java的反射技术详解 #### 一、Java反射技术概述 Java反射技术是Java语言的一项重要特性,它赋予了Java程序“动态性”。利用反射机制,可以在程序运行时动态地获取类的信息,并直接操作这些信息。这对于那些...
在这种背景下,"反射技术压缩和修复Access数据库(没有依赖)"的方案显得尤为重要。 反射技术,通常指的是在运行时通过程序动态地获取类、对象、方法等信息并进行操作的能力,这在编程中被称为“反射”。在.NET框架下...
本文将深入探讨如何结合反射技术和XML来实现通用实体类,并解释这两个技术在这一过程中的作用。 首先,让我们了解什么是反射技术。在Java中,反射是一种强大的工具,它允许程序在运行时检查和操作其他类、接口、...
反射技术在Java编程语言中扮演着至关重要的角色,它是Java平台的一个强大特性,允许程序在运行时检查并操作自身。面试中,反射技术通常被用来评估候选人的高级Java理解和问题解决能力。以下是对这一主题的详细阐述:...