反射 学习用例

原创 2007年09月19日 15:02:00

第一步:新建一个类库项目,命名“ReflectionExample” ,代码:

using System;
namespace ReflectionExample
{
    
public class HelloWorld
    {
        
string myName = null;
        
public HelloWorld(string name)
        {
            myName 
= name;
        }
        
public HelloWorld()
            : 
this(null)
        { }
        
public string Name
        {
            
get
            {
                
return myName;
            }
        }
        
public void SayHello()
        {
            
if (myName == null)
            {
                System.Console.WriteLine(
"Hello World");
            }
            
else
            {
                System.Console.WriteLine(
"Hello," + myName);
            }
        }
    }
}

编译,生成一个ReflectionExample.dll文件.

第二步:新建一个项目,命名“Reflection”,添加引用“ReflectionExample.dll”

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Reflection;

namespace ReflectionExample
{
    
class Class1
    {
        
//[STAThread]
        static void Main(string[] args)
        {
            System.Console.WriteLine(
"列出程序集中的所有类型");
            Assembly a 
= Assembly.LoadFrom("ReflectionExample.dll");
            Type[] mytypes 
= a.GetTypes();

            
foreach (Type t in mytypes)
            {
                System.Console.WriteLine(t.Name);
            }
            System.Console.ReadLine();
            Console.WriteLine(
"ManifestModule,获取该程序清单的模块:{0}", a.ManifestModule);
            Console.ReadLine();
            Console.WriteLine(
"CodeBase,获取最初指定程序集的位置:{0}", a.CodeBase);
            Console.ReadLine();
            Console.WriteLine(
"Entry point,获取此程序集的入口点:{0}", a.EntryPoint);
            Console.ReadLine();
            System.Console.WriteLine(
"列出HellWord中的所有方法");
            Type ht 
= typeof(HelloWorld);
            MethodInfo[] mif 
= ht.GetMethods();
            
foreach (MethodInfo mf in mif)
            {
                System.Console.WriteLine(mf.Name);
            }
            System.Console.ReadLine();
            System.Console.WriteLine(
"实例化HelloWorld,并调用SayHello方法");
            Object obj 
= Activator.CreateInstance(ht);
            
string[] s = { "zhenlei" };
            Object bojName 
= Activator.CreateInstance(ht, s);
            BindingFlags flags 
= (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            MethodInfo msayhello 
= ht.GetMethod("SayHello");
            msayhello.Invoke(obj, 
null);
            msayhello.Invoke(bojName, 
null);
            System.Console.ReadLine();
        }
    }
}

运行结果是:

结果

 

jodaTime学习用例

jodatime
  • zheng0518
  • zheng0518
  • 2016年02月19日 11:53
  • 455

如何防止单例模式被JAVA反射攻击

单例模式相信大家都知道,用过的人不在少数。之前写过一篇博文《singleton模式四种线程安全的实现》(参见:http://blog.csdn.net/u013256816/article/detai...
  • wangtaomtk
  • wangtaomtk
  • 2016年08月19日 21:44
  • 624

Java设计模式(一):单例模式,防止反射和反序列化漏洞

一、懒汉式单例模式,解决反射和反序列化漏洞 package com.iter.devbox.singleton; import java.io.ObjectStreamException; impo...
  • hardwin
  • hardwin
  • 2016年05月22日 22:49
  • 3582

抵御反射创建单例模式的对象

《Effective Java》一书中第三条经验指出:“用私有构造器或者枚举类型强化Singleton”,其中先提出了两种单例模式。 1.暴露静态final字段 public class El...
  • u010595903
  • u010595903
  • 2016年06月04日 19:22
  • 430

如何防止单例模式被JAVA反射攻击

单例模式相信大家都知道,用过的人不在少数。之前写过一篇博文《singleton模式四种线程安全的实现》(参见:http://blog.csdn.net/u013256816/article/detai...
  • u013256816
  • u013256816
  • 2016年01月15日 18:29
  • 9042

枚举单例模式如何防止反射攻击

关于单例模式,相信大家都所有了解,比较经典的实现有饿汉式、借助内部类、双重锁检测,这些实现可以保证线程安全,但是在某些特殊情况下并不能够保证仅仅只有一个单例,因为像序列化、反射攻击等往往可以生成新的实...
  • liuyingming910
  • liuyingming910
  • 2015年01月06日 12:48
  • 289

MVC的学习用PPT

  • dongdongdongJL
  • dongdongdongJL
  • 2016年02月20日 09:17
  • 850

大白菜pe 通用pe 安装心得

大白菜官网:http://www.winbaicai.com/ 1、大白菜只能制作到U盘;移动硬盘也可以,但是需要格式化(移动硬盘数据迁移麻烦)。在论坛上看到分了区的移动硬盘装了大白菜就变成一个区了...
  • luoyanghero
  • luoyanghero
  • 2014年01月06日 19:01
  • 1653

学习编程有必要做笔记吗?

小编发现W3Cschool的程序员很喜欢记笔记,桌面永远挂着个笔记软件,笔记本也写的密密麻麻的。那么做编程真的有必要做笔记吗?怎么记呢?一起来看下知乎网友怎么说。 @花生PeA记不记笔记看情况。 比如...
  • w3cschoolcn
  • w3cschoolcn
  • 2017年04月05日 16:07
  • 1542

枚举和反射的学习小结

/*枚举 枚举实现原理 枚举的最大作用就是让某种类型变量的取值只能为若干个固定值中的一个。 例子:*/ class WeekDay { private WeekDay(){} //定义关...
  • qq645139778
  • qq645139778
  • 2015年01月15日 19:07
  • 220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:反射 学习用例
举报原因:
原因补充:

(最多只允许输入30个字)