public class A
{ }
public class B : A
{ }
public class C : A
{ } public static class Extension
{
public static void Test(B b)
{
Console.WriteLine("this is B");
}
public static void Test(A a)
{
Console.WriteLine("this is A");
}
public static void Test(C c)
{
Console.WriteLine("this is C");
}
} internal class Program
{
static void ReflectInvoke(List<A> objs)
{
MethodInfo[] mis = (from method in typeof(Extension).GetMethods()
where method.Name == "Test"
select method).ToArray();
foreach (var a in objs)
{
foreach (var m in mis)
{
if (m.GetParameters().First().ParameterType.Name == a.GetType().Name)
{
m.Invoke(null, new object[] { a });
break;
} }
}
}
}

output:


this is A
this is B
this is C

C# 利用反射模拟多态效果的更多相关文章

  1. WPF中利用RadialGradient模拟放大镜效果

    原文:WPF中利用RadialGradient模拟放大镜效果 --------------------------------------------------------------------- ...

  2. 利用jquery模拟select效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 利用反射模拟一个spring的内部工作原理

    这个简单的案例是实行了登录和注册的功能,没有链接数据库.  在bean中id 是唯一的,id和name的区别在于id不能用特殊字符而name可以用特殊字符,比如:/-\.... package com ...

  4. 利用反射和代理简单模拟mybatis实现简单的CRUD

    利用反射接口做java数据库操作 今天突发奇想,好像一些基本的CRUD操作路数都是一样的,又想到mybatis中的操作,便想着简单的模拟一下.随便写写,就当练习反射了. Dao接口类: 这里使用泛型, ...

  5. Java开发笔记(七十九)利用反射技术操作私有属性

    早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...

  6. 利用反射生成JDK动态代理

    利用反射生成JDK动态代理 在Java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成JDK动态代理类和动态代理 ...

  7. 采用dom4j和反射模拟Spring框架的依赖注入功能

    Spring的依赖注入是指将对象的创建权交给Spring框架,将对象所依赖的属性注入进来的行为.在学习了dom4j后,其实也可以利用dom4j和反射做一个小Demo模拟Spring框架的这种功能.下面 ...

  8. 利用反射跟自定义注解拼接实体对象的查询SQL

    前言 项目中虽然有ORM映射框架来帮我们拼写SQL,简化开发过程,降低开发难度.但难免会出现需要自己拼写SQL的情况,这里分享一个利用反射跟自定义注解拼接实体对象的查询SQL的方法. 代码 自定义注解 ...

  9. java设计模——反射的应用 (利用反射来去除if判断语句)

    利用反射来去除if判断语句 我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方. If(“add”.equalsIgnoreCase(fu ...

  10. 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)

    试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表, ...

随机推荐

  1. 植物大战僵尸杂交版最新版(PC+手机+苹果)+ 修改器+高清工具

    游戏介绍 <植物大战僵尸杂交版>在保留原作经典塔防玩法的基础上,进行了大胆创新和优化.潜艇伟伟迷通过融合多种植物和僵尸元素,创造了全新的游戏体验.玩家不仅能体验到熟悉的植物防御僵尸的乐趣, ...

  2. autMan奥特曼机器人--可爱猫对接微信教程

    教程开始 文章底部下载可爱猫框架以及对应的微信版本 1.安装3.4.0.38版本微信,解压可爱猫框架压缩包 如果微信安装了高于3.4.0.38的版本,请先卸载 2.打开可爱猫框架,会弹微信扫码登录,机 ...

  3. Ansible - [02] 基础配置以及常用操作场景

    Ansible 基础配置 主配置文件:/etc/ansible/ansible.cfg ansible配置文件查找顺序 首先检测ANSIBLE_CONFIG变量定义的配置 其次检查当前目录下的./an ...

  4. Java 解析XML的几种方式:DOM、SAX、JDOM和DOM4J。

    归纳总结Java解析XML主要有四中方式,分别是DOM.SAX.JDOM和DOM4J.其中DOM和SAX是官方包自带,另外两个JDOM和DOM4J是第三方包. 一.此篇测试代码用到的XML情况 . 1 ...

  5. Windows 提权-内核利用_2

    本文通过 Google 翻译 Kernel Exploits Part 2 – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校 ...

  6. Laravel11 从0开发 Swoole-Reverb 扩展包(四) - 触发一个广播事件到reverb服务之后是如何转发给前端订阅的呢(下)?

    前情提要 上一篇我们讲到了reverb服务的通信上下文和路由处理,路由实现了pusher关联的几种请求.那么这一篇我们主要来讲混响服务Server 混响 Server 负责基于 ReactPHP 的 ...

  7. 利用pip/conda安装库时,出现requires XXX, which is not installed/incompatible

    博客地址:https://www.cnblogs.com/zylyehuo/ 出现以下提示警告时 step1 step2 step3 总结 利用pip/conda安装库时,出现requires XXX ...

  8. 【长知识】BIOS

    设置最新UEFI BIOS 本章导读 BIOS是电脑启动和操作的基础,若电脑系统中没有BIOS,则所有硬件设备都不能正常使用.UEFI是目前最新的BIOS类型,以后会逐渐取代传统的BIOS.本章将认识 ...

  9. Envoy 学习笔记(一)

    该系列学习笔记是作者为记录云原生基础架构学习过程而写.若想要详细学习 envoy,大家可以去 tetrate 官网和官方文档中学习. 如果没有任何接触云原生的经验,可以在学习相关概念前,去了解以下概念 ...

  10. C# 线程基础——用户模式、内核模式

    C# 线程基础--用户模式.内核模式 参照:用户模式和内核模式 - Windows drivers | Microsoft Docs 基础概念 运行 Windows 的计算机中的处理器有两个不同模式: ...