首页 新闻 会员 周边

attribute疑问

0
悬赏园豆:20 [已解决问题] 解决于 2012-03-08 20:11

C#中可以通过attribute实现类、方法等的特殊属性。

如[ SerializableAttribute],但不知是如何工作的。在mvc中有[httppost] attribute当get方法时,将会禁止,提示找不到页面。

如此尝试,自定义一个attribute,然后使用。

 

控制台,并没有中断

public class abc : Attribute
{
public abc()
{
say();
}
void say() { throw new Exception() { }; }
}
class Program
{
static void Main()
{
var e = new b();
e.bb();
Console.Read();

}
}
class b
{
[abc()]
public void bb() {
Console.Write(12);
}
}

问题补充:

问题:我期望 方法bb在加入 abc attribute后,调用时能执行say函数,而say函数中有throw,然而实际并没有发生throw。

lucika.zh的主页 lucika.zh | 初学一级 | 园豆:62
提问于:2012-02-26 08:05
< >
分享
最佳答案
0

attribute都是通过反射调用的。加入你在User类上标记了[Serializable],然后将它序列化成xml,代码大概就是:

User user = ...;
var serializer = new XmlSerializer(typeof(User));
serializer.Serialize(user);

在最后一句Serialize(user)调用中,框架类库的代码用反射获取到了User类的元数据,其中就包括SerializableAttribute,如果你没加,就会被发现并且抛出异常。

MVC是同样的道理。你写了一个controller,里面包含若干个action,当一个请求过来时,MVC框架代码会根据请求寻找到对应的action方法。如果某个action标记了[HttpPost],那么MVC框架代码在通过反射寻找“合适的action”时,就会检查它,如果最终没有找到合适的action,就会报404. 因此attribute一般都是在反射时获取到并执行逻辑的,你认为的哪些“自动”的行为,其实是框架代码帮你完成了。

收获园豆:20
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-02-27 16:13

谢谢。

lucika.zh | 园豆:62 (初学一级) | 2012-03-01 11:39
其他回答(2)
0

你的问题是什么?

Firen | 园豆:5385 (大侠五级) | 2012-02-26 08:53
0

attribute你得配合反射使用啊

Lukexywang | 园豆:178 (初学一级) | 2012-02-26 18:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册