mic*_*jas 2 .net c# cil dynamic
我们假设我们有这个类:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,是否有可能在C#中拦截对属性get方法的调用,运行其他一些方法并返回该方法的结果而不是属性值?我希望能够在幕后做一些额外的逻辑.缺点是这个类无法更改(在C#级别).也许有些IL?
看看PostSharp:http://www.sharpcrafters.com/
这实现了您正在寻找的东西,以及更多.
PostSharp实现面向方面的.NET编程.它是一种商业产品.很酷.
请注意,此问题的任何解决方案都将涉及一些运行时开销(一些内存,一些额外的时间来进行函数调用.)没有什么是完全免费的.
如果你的类无法更改,你可以考虑使用像PostSharp这样的工具- 它允许你编织代码来拦截或替换对方法和属性的调用.
如果您可以更改代码,那么只需避免使用自动属性,并显式实现get和set操作.然后你可以做任何你需要的事情.或者,您可以将属性定义为虚拟,并派生另一个类来更改getter和/或setter的行为:
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class PersonDerived : Person
{
public override int Id { get { ... } set { ... } }
public override string Name { get { ... } set { ... } }
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要进行单元测试,您可能需要查看Moq或TypeMock等模拟工具.
| 归档时间: |
|
| 查看次数: |
4448 次 |
| 最近记录: |