PostSharp AOP编程:3.PostSharp的LocationInterceptionAspect类基本组成

简介:

      在PostSharp中得LocationInterceptionAspect类是针对属性或字段的面向方面截取。继承与它的特性将可以截取初始化属性、设置属性、获取属性等时候的数据,并且可以在这几个过程中针对属性进行附加控制。

        这个类里面有三个主要的函数可以重载分别是RuntimeInitialize(LocationInfo locationInfo)、OnSetValue(LocationInterceptionArgs args)、OnGetValue(LocationInterceptionArgs args)。他们分别意义如下:

        RuntimeInitialize(LocationInfo locationInfo):初始化包含属性或字段的类的时候运行此函数,增加控制代码,可以截取到运行此属性或字段的类信息,属性类型等信息。

        OnSetValue(LocationInterceptionArgs args):设置属性或字段值的时候运行此函数,增加相关设置值时代码,可以获取到此属性值、属性名等相关信息。

        OnGetValue(LocationInterceptionArgs args)。获取属性或字段值的时候运行此函数。

        首先我们编写一个继承于LocationInterceptionAspect类的特性,并且重载相关函数如下代码:

 


 
 
  1. [Serializable
  2. public class TestAspect : LocationInterceptionAspect 
  3.     //当目标类初始化属性的时候运行此函数。 
  4.     public override void RuntimeInitialize(LocationInfo locationInfo) 
  5.     { 
  6.         //打印类名、属性或字段名、字段类型 
  7.         string name = locationInfo.DeclaringType.Name + "." +  
  8.             locationInfo.Name + " (" + locationInfo.LocationType.Name + ")"; ; 
  9.         Console.WriteLine(name); 
  10.         Console.WriteLine("A"); 
  11.         System.Reflection.FieldInfo finfo = locationInfo.FieldInfo; 
  12.     } 
  13.     //设置属性的时候运行 
  14.     public override void OnSetValue(LocationInterceptionArgs args) 
  15.     { 
  16.         Console.WriteLine(args.LocationName); 
  17.         Console.WriteLine("B"); 
  18.         base.OnSetValue(args); 
  19.     } 
  20.     //获取属性的时候运行 
  21.     public override void OnGetValue(LocationInterceptionArgs args) 
  22.     { 
  23.         Console.WriteLine("C"); 
  24.         base.OnGetValue(args); 
  25.     } 

        其次我们编写一个目标类,此类中含有一个属性并且增加这个属性的特性如下代码所示:

 


 
 
  1. public class People 
  2.     [TestAspect] 
  3.     public string Name { get; set; } 

        最后我们在客户端初始化People类并且设置属性和获取属性如下代码:

 


 
 
  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         People p = new People(); 
  5.         p.Name = "Mike1"
  6.         Console.WriteLine(p.Name); 
  7.         Console.ReadLine(); 
  8.     } 
  9.  

        如需源码请点击 PostSharpField.rar  下载,运行效果如下图:


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827085


相关文章
|
存储 XML 传感器
NB-IoT 之 CoAP 协议格式介绍 | 学习笔记
快速学习 NB-IoT 之 CoAP 协议格式介绍
NB-IoT 之 CoAP 协议格式介绍 | 学习笔记
|
Linux 网络安全 Android开发
向日葵 Windows 端无法连接 Linux 问题的解决方案
向日葵 Windows 端无法连接 Linux 问题的解决方案
5475 0
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
本文介绍了在C# WPF应用程序中引入外部iconfont图标时可能遇到的显示问题及其解决方法:1) 检查资源路径和引入格式是否正确,确保字体文件引用格式为“#xxxx”,并正确指向字体文件位置;2) 确保图标资源被包含在程序集中,通过设置字体文件的生成操作为Resource(资源)来实现。
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
|
算法 API 计算机视觉
【原理解密】多角度、多尺度、多目标的边缘模板匹配
【原理解密】多角度、多尺度、多目标的边缘模板匹配
1008 0
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
1508 0
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与CV教程(15) | 视觉模型可视化与可解释性
本文讲解了一些理解 CNN 可视化的方法(特征、滤波器可视化),以及一些有趣的应用,如DeepDream、图像神经风格迁移(特征反演 + 纹理生成)等【对应 CS231n Lecture 12】
19356 1
深度学习与CV教程(15) | 视觉模型可视化与可解释性
|
算法 计算机视觉
OpenCV(四十七):RANSAC优化特征点匹配
OpenCV(四十七):RANSAC优化特征点匹配
1467 0
|
算法 芯片
[Halcon&定位] 基于互相关(NCC)的模板匹配
[Halcon&定位] 基于互相关(NCC)的模板匹配
849 0
|
传感器 监控 数据可视化
Baumer工业相机中曝光与增益两种功能的优点和作用以及使用方法
Baumer工业相机中曝光与增益两种功能的优点和作用以及使用方法
697 0
|
机器学习/深度学习 算法 数据可视化
k-means聚类算法
k-means聚类算法
1868 0