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. QPS/TPS简介

    系统吞度量要素 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高,外部系统接口.IO影响速度越慢,系统吞吐能力越低,反之越高 ...

  2. Ubuntu14.04上搭建FTP服务器

    Ubuntu上常用的Ftp服务器是vsFTPd.安装前检查下是否已经装好了.用 sudo service vsftpd restart,如果提示重启成功之类的信息,说明此服务器已经安装好了vsFTPd ...

  3. iOS程序闪退的原因以及处理办法

    iOS程序闪退是一种比较常见的现象.闪退的情况很多,造成程序闪退的原因也很多. ================================启动时闪退======================= ...

  4. 学生信息管理系统(c语言)

    ①注意: 程序中使用了sleep()函数.system()函数 关于 sleep() 函数 sleep() 函数的头文件和用法会因环境的不同而有所不同. 具体见-sleep()函数功能及用法 关于sy ...

  5. 使用simhash库来进行网页去重

    首先感谢作者yanyiwu贡献的开源项目https://github.com/yanyiwu/simhash.在做项 目过程中,翻了一遍<这就是搜索引擎  核心技术详解>这本书的查重算法, ...

  6. 关于 frame的一些基本知识

    关于 frame的一些基本知识只是摘抄了一部分,供初学者参考. b.帧速率: 帧速率是每秒显示的图像数.标准影片(NTSC) 是29.97 帧第秒 (fps),电影是每秒24 帧fps.欧洲标准是(P ...

  7. 【html5】html5本地简单存储

    html5本地简单存储 HTML5 提供了四种在客户端存储数据的新方法,即 localStorage .sessionStorage.globalStorage.Web Sql Database. 前 ...

  8. servlet上传文件报错(三)

    1.具体报错如下 null null Exception in thread "http-apr-8686-exec-5" java.lang.OutOfMemoryError: ...

  9. freemarker自定义标签报错(二)

    freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Unexpected end of file reached. at freemarker ...

  10. Linux显示更新十次后退出

    Linux显示更新十次后退出 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ top -n 10 top - 19:19:21 up 48 min, 2 use ...