[英]Using an attribute to update an object passed as a parameter
我已经对C#方法属性做了一些工作,但是还没有完成满足此要求的工作,我什至不确定是否可行,但是可以。
假设我有一个类似的课程。
public class MyObject
{
public DateTime? TheTime {get;set;}
public string AValue {get;set;}
}
还有这样的功能
public void AddObject(MyObject mo)
{
//Do Something
}
现在,当对象被传递时,将设置AValue,但TheTime将为null(因为需要在AddObject方法中进行设置)。 我可以这样...
public void AddObject(MyObject mo)
{
mo.TheTime = DateTime.Now;
//Do Something
}
但是我不喜欢这样,我想要的是创建一个可以为我完成工作的属性。 所以最终,我想要这样的东西
[AutoUpdate(Parameter = "mo")]
public void AddObject(MyObject mo)
{
//Do Something
}
而魔术为我做。
关于如何创建属性以执行此操作的任何想法? 一个简单的链接就可以了,我似乎暂时找不到我想要的东西
您可以使用横切关注点库( AOP )实现此目的,该库在您的方法周围应用了一个装饰器模式 ,从而允许您通过属性注入功能。 通常用于日志记录之类的东西。
看看Spring.Net或温莎城堡 。
一个创建您自己的实现的装饰器模式的快速示例。
public class MyExtendedClass : IMyClass
{
public MyExtendedClass(IMyClass myClass)
{
this.innerMyClass= myClass;
}
public void AddObject(MyObject mo)
{
// does mo have an attribute on AddObject
// if so
Type clsType = innerMyClass.GetType();
MethodInfo mInfo = clsType.GetMethod("AddObject");
if (Attribute.IsDefined(mInfo, typeof(AutoUpdateAttribute)))
{
mo.TheTime = DateTime.Now;
}
innerMyClass.AddObject(mo);
}
}
然后像这样使用:
IMyClass myClass = new MyExtendedClass(new MyClass());
myClass.AddObject(mo);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.