C# 实现 Aop [Emit动态生成代理类方式]
摘要:1 using System.Reflection; 2 using System.Reflection.Emit; 3 public static class DefaultProxyBuilder 4 { 5 private static readonly Type VoidType = Type.GetType("System.Void"); //函数返回 void类型 6 7 public static T CreateProxy<T>() 8 { 9 Type...
阅读全文
posted @
2013-03-16 15:54
极简
阅读(1645)
推荐(0) 编辑
C# 实现 Aop [继承ContextBoundObject方式]
摘要:AopAttribute 1 [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] 2 public class AopAttribute : ProxyAttribute 3 { 4 private IAopProxyBuilder builder=null; 5 public AopAttribute(Type builderType) 6 { 7 this.builder = (IAopProxyBuilder)Activator.C...
阅读全文
posted @
2013-03-16 15:54
极简
阅读(2071)
推荐(0) 编辑
Nbear讲解 之核心类 DynamicMethodFactory
摘要:DynamicMethodFactory的作用就像它的名字一样,构建动态的方法。所产生的动态方法基于两种委托类型:分别对应实例方法和静态方法,下面重点说静态的动态方法。1 public delegate object StaticDynamicMethodProxyHandler(object[] paramObjs);2 public delegate object DynamicMethodProxyHandler(object ownerInstance, object[] paramObjs);基于委托StaticDynamicMethodProxyHandler, 动态创建一个方法,
阅读全文
posted @
2013-03-16 15:53
极简
阅读(514)
推荐(0) 编辑
Spring.Net Aop
摘要:Spring.Net 有四种通知:IMethodBeforeAdvice,IAfterReturningAdvice,IMethodInterceptor,IThrowsAdviceBeforeAdvice 1 using System.Reflection; 2 using Spring.Aop; 3 public class BeforeAdvice : IMethodBeforeAdvice 4 { 5 public void Before(MethodInfo method , object[] args , object target...
阅读全文
posted @
2013-03-16 15:53
极简
阅读(567)
推荐(0) 编辑
Spring.Net Ioc 实例
摘要:配置文件 import.xml 1 <?xml version="1.0" encoding="utf-8" ?> 2 <objects xmlns="http://www.springframework.net" xmlns:aop="http://www.springframework.net/aop"> 3 4 <!--带参数的构造函数--> 5 <object id="HelloWorld1" type="IocApp.HelloWor
阅读全文
posted @
2013-03-16 15:53
极简
阅读(264)
推荐(0) 编辑
NBear实例讲解
摘要:Nbear的接口主要是调用ObjectConvertor类的3大类方法:ToObject,ToList,ToDataTable。主要功能:不同类型的对象可以通过类型属性的映射,进行转换,包括类与接口。对于两种类型毫无继承关系,且两种类型的数据需要转换时,Nbear是很有用的。另外Nbear是开源代码,在类型转换的过程中,主要使用 System.Reflection.Emit;反射来取值并赋值到新对象。使用IL编程一定程度上提高了程序的效率。要研究IL的网友,可以认真研究一下其源码。数据模型 1 public interface IUser 2 { 3 4 stri...
阅读全文
posted @
2013-03-16 15:52
极简
阅读(387)
推荐(0) 编辑
Nbear讲解 之核心类CodeGenerator
摘要:以下是CodeGenerator类用的一些辅助类:Cmp比较类型 1 /// <summary> 2 /// Cmp 3 /// </summary> 4 public enum Cmp 5 { 6 /// <summary> 7 /// LessThan 8 /// </summary> 9 LessThan,10 /// <summary>11 /// EqualTo12 /// </summary>13 EqualTo,14 ...
阅读全文
posted @
2013-03-16 15:52
极简
阅读(397)
推荐(0) 编辑
索引器的本质
摘要:讲索引器的本质前,先说说属性的本质,在IL里面我们可以清楚地看到,属性的get和set两个访问器,其实就是直接调用类里面定义的两个方法: set_属性名|get_属性名.所以访问属性的途径,除了反射获取Propertie以外,我们可以绕过属性对象,直接调用set_属性名|get_属性名方法。索引器除了具备属性的特性之外,索引器所对应的属性名必须为Item,如果一个类中定义了索引器,又定义了一个名为Item的属性,结果就会提示同名的错误.除此之外,从IL中看出,属性本身就是特殊的方法,一般的属性都不带参数,而索引器至少带一个参数.如图: 1 public class getset 2 ...
阅读全文
posted @
2013-03-16 15:51
极简
阅读(314)
推荐(0) 编辑
接口 显式实现 反射
摘要:接口的显式实现,需要转为接口来调用.如下图,该方法不仅是私有的,而且是虚类型的。反射无法取到私有方法,所以也就无法通过反射该类来调用显式实现方法。此时可以考虑使用接口类型反射来调用。在多接口继承,并且接口多层次时,需要弄清楚最终实现的类到,是否多次包含最顶层接口的方法例如B继承A,C继承A,而D继承B,C, 此时D是实现一个A还是两个A,答案是一个A。也就是D的实现,不是实现B中A的方法,跟C中A的方法,而是分别实现,A,B,C所定义的方法。 1 public interface ISpeakor 2 { 3 void Speak(); 4 } 5 ...
阅读全文
posted @
2013-03-16 15:51
极简
阅读(349)
推荐(0) 编辑
继承成员的差异:接口与类
摘要:1 interface IBase 2 { 3 string Name 4 { 5 get; 6 set; 7 } 8 9 }10 interface IPenson:IBase11 {12 int Age13 {14 get;15 set;16 }17 }18 class Base19 {20 public string Na...
阅读全文
posted @
2013-03-16 15:50
极简
阅读(283)
推荐(0) 编辑
反射中 BindingFlags标识
摘要:为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。 指定 BindingFlags.Public 可在搜索中包含公共成员。 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员(即私有成员和受保护的成员)。 指定 BindingFlags.FlattenHierarchy 可包含层次结构上的静态成员。 下列 BindingFlags 修饰符标志可用于更改搜索的执行方式: BindingFlags.IgnoreCase,表示忽略 name 的大小写。 BindingFlags.DeclaredOn...
阅读全文
posted @
2013-03-16 15:50
极简
阅读(200)
推荐(0) 编辑
水平分割数据表
摘要:1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Linq.Expressions; 6 namespace Model 7 { 8 public interface ITable 9 { 10 int ID 11 { 12 get; 13 set; 14 } 15 string ...
阅读全文
posted @
2013-03-16 15:49
极简
阅读(307)
推荐(0) 编辑
xml文档+xsl文件=>Html 实例
摘要:Xml文件 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> 3 <catalog> 4 <cd> 5 <title>Empire Burlesque</title> 6 <artist>Bob Dylan</artist> 7 <country>USA
阅读全文
posted @
2013-03-16 15:49
极简
阅读(309)
推荐(0) 编辑
C# 协变与逆变 有何实用性剖析
摘要:【协变】 主要体现在泛型中,更大地兼容返回值的类型【逆变】继承类的操作类/操作方法参数,可以用基类的操作类/操作方法进行复用,不需要重复定义. 实际开发中,如果不同控件 响应相同的操作,正常情况下,由于不同的控件事件的委托不同,要写两个操作函数。 在逆变的情况下, 就可以简化为一个事件参数使用 System.EventArgs类型,也就是基类型。 现在自动生成的事件函数都是一下格式: DoEvent(object sender, System.EventArgs e)。【接口中的应用】 逆变:TypeBookBase类的ShowSort()方法,使用继承于IComparer<Book&g
阅读全文
posted @
2013-03-16 15:48
极简
阅读(501)
推荐(0) 编辑
C# 协变 逆变
摘要:1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace test 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 Dog dog=new Dog(); 13 Animal animal=dog; 14 15 A...
阅读全文
posted @
2013-03-16 15:47
极简
阅读(261)
推荐(0) 编辑