step one:(找入口)

  using System.Reflection; //引用需要用到的命名空间

  做任何事都要有开始的地方,不例外,反射也要先找到反射的入口,举个栗子: Assembly assemble = Assembly.Load("SqlServer");  //反射的入口::动态的加载dll

step two:(获类型)

  加载完DLL之后,根据类的完整名称找到类型,再举个栗子: Type type = assemble.GetType("SqlServer.Class1");  //SqlServer.Class1就是SqlServer中的一个类

知道类之后可以通过循环遍历找到类中所有的方法名:

         

 Console.WriteLine("*************GetMethods**************");
          foreach (MethodInfo method in type.GetMethods())
          {
            Console.WriteLine("名称{0}",method.Name);
          }

step three:(搞对象)

  下面就要根据step two中获取的类型创对象,有了对象一切就都好办了,举例:object oBject = Activator.CreateInstance(type);  //根据类型,创建对象,由于不知道对象类型所以只能object

再下来就是使用对象了,围绕着对象做一些事情

具体的使用方法举栗:

MethodInfo show1 = type.GetMethod("show1",new Type[] { }); //show1是类中的方法且是无参的
show1.Invoke(oBject,null); MethodInfo show2 = type.GetMethod("show2", new Type[] { typeof(int) }); //show2方法是有参数的 show2.Invoke(oBject, new object[] { });

要放大招了,准备好!````````````````````````````````````````````````````````````````````简直黑科技

你知道吗,通过反射可以调用类的私有方法,只能说也是贼溜了。

MethodInfo show3 = type.GetMethod("show3", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);//通过反射调用私有方法
show3.Invoke(oBject, null);

附上SqlServer.Class1的代码:

 public void show1()
{ Console.WriteLine("方法是{0}",this.GetType()); } public void show2(int id) { Console.WriteLine("这是show2方法(有参的){0}",id); } private void show3()
{
Console.WriteLine("这是私有方法{0}",this.GetType());
}

同理 运用反射操作表结构----------------------------------------------------------

1.命名空间下的元素的默认访问修饰符

public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。

internal : 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。

2.各类型中的成员的默认访问修饰符

剩下的修饰符主要是正对继承这个语言特性的,拥有继承的类型有两个类(class)和接口(interface)。public,internal同样可以用于类型成员。

private : 同一类和结构的代码可以访问该类型和成员。

protected : 同一类和派生(继承特性)类中的代码可以访问该类型和成员。

protected internal :  同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。

MSDN提示 :

1.) 派生类的可访问性不能高于其基类型。换句话说,不能有从内部类 A 派生的公共类 B。如果允许这种情况,将会使 A 成为公共类,因为 A 的所有受保护的成员或内部成员都可以从派生类访问。

2.) 成员的可访问性决不能高于其包含类型的可访问性。

3.) 可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。

接口(interface)

接口成员访问修饰符默认为public,且不能显示使用访问修饰符。

类(class)

构造函数默认为public访问修饰符。

析构函数不能显示使用访问修饰符且默认为private访问修饰符。

类的成员默认访问修饰符为private;

枚举(enum)

枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。

结构(struct)

结构成员默认为private修饰符。

结构成员无法声明为protected成员,因为结构不支持继承。

嵌套类型

嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。

反射Reflection创建的更多相关文章

  1. [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦

    [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦 本节导读:上篇文章简单介绍了.NET面向对象中一个重要的技术反射的基本应用,它可以让我们动态的调 ...

  2. [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程

    [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...

  3. [整理]C#反射(Reflection)详解

    本人理解: 装配件:Assembly(程序集) 晚绑定:后期绑定 MSDN:反射(C# 编程指南) -----------------原文如下-------- 1. 什么是反射2. 命名空间与装配件的 ...

  4. 代理(Proxy)和反射(Reflection)

    前面的话 ES5和ES6致力于为开发者提供JS已有却不可调用的功能.例如在ES5出现以前,JS环境中的对象包含许多不可枚举和不可写的属性,但开发者不能定义自己的不可枚举或不可写属性,于是ES5引入了O ...

  5. C# 反射(Reflection)技术

    本文参考自C#反射(Reflection)详解,纯属学习笔记,加深记忆 在介绍反射前,先介绍一个重要的知识点         .Net应用程序是由程序集(Assembly).模块(Module).类型 ...

  6. C#反射(Reflection)详解

    1. 什么是反射2. 命名空间与装配件的关系3. 运行期得到类型信息有什么用4. 如何使用反射获取类型5. 如何根据类型来动态创建对象6. 如何获取方法以及动态调用方法7. 动态创建委托 1.什么是反 ...

  7. C# 反射Reflection——反射反射程序员的快乐

    一.什么是反射 反射Reflection:System.Reflection,是.Net Framework提供的一个帮助类库,可以读取并使用metadata. 反射是无处不在的,MVC-Asp.Ne ...

  8. C#反射动态创建实例并调用方法

    在.Net 中,程序集(Assembly)中保存了元数据(MetaData)信息,因此就可以通过分析元数据来获取程序集中的内容,比如类,方法,属性等,这大大方便了在运行时去动态创建实例. MSDN解释 ...

  9. 反射Reflection

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection;// <-- ...

随机推荐

  1. Maven中模块的聚合以及对jar包的继承

    我需要将之前的A B C三个模块聚合到一个一个工程中ABC项目中 pom.xml文件中应该这样配置 1.修改packaging里面的配置 <!-- 用于聚合这个项目的时候应该将packaging ...

  2. AGC012 - E: Camel and Oases

    原题链接 题意简述 沙漠中有个排成一条直线的绿洲,一头储水量为的骆驼. 骆驼有两个操作: 走到距离在V以内的一个绿洲. 飞到任意一个绿洲,但V减少一半.V=0时不能飞. 问骆驼依次从每个绿洲出发,能否 ...

  3. postman 中调试接口的小记录

    1.form-data:  就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开.既可以上传键值对,也可以上传文件.当上传的字段是文件 ...

  4. 设置TCP_USER_TIMEOUT参数来判断tcp连接是否断开

    [TOC] 1. bug描述 前段时间遇到这样的一个问题,openstack一个控制节点宕机后,在宕机后一段时间内创建的虚拟机,一直卡在创建中的状态.有的甚至要等到16分钟之后虚拟机才会切换到下一个状 ...

  5. nimi SearchEngin 项目思路及算法

    最近做一个轻量文本搜索项目,在项目实行过程中,如果使用余弦求网页相似度,不能适应海量网页查重.看了那本<这就是搜索引擎  核心技术详解>后,对simhash算法有一定的理解,并且喜欢上了这 ...

  6. 使用dlib中的深度残差网络(ResNet)实现实时人脸识别

    opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...

  7. linux系统 initrd.img中init启动脚本分析

    概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...

  8. JavaScript实现弹窗报错

    JavaScript实现弹窗报错 1.具体错误如下 SCRIPT 5022:cannot call methods on dialog prior to initialization; attempt ...

  9. freemarker入门实例

    freemarker入门实例 1.设计思路 (1)新建Maven Project (2)生成freemarker模板 (3)写freemarker页面ftl文件 (4)写测试文件 2.新建Maven ...

  10. org.hibernate.TransientObjectException:The given object has a null identifier

    1.错误描述 org.hibernate.TransientObjectException:The given object has a null identifier:com.you.model.U ...