2008-06-06 16:43:17
涉及的技术内容包括:.NET/C#、Java、Python、搜索引擎、电子商务等。
记录读书笔记、生活点滴。关注基础理论和开发……
除特别标注外,所有文章均为作者原创,转载请注明出处。谢谢!

  查看 "推荐文章目录"。  


  雨痕内部技术交流群,欢迎熟识的朋友参与。 将 添加为您的 MSN 联系人即可。
  承接搜索引擎开发项目;寻求搜索引擎商业合作伙伴。
  为杜绝垃圾广告的侵扰,评论和留言中不能包含网页或邮件链接,请见谅!
  如果有什么问题,可以单击右侧图标给雨痕发消息。( 绿色: 在线; 灰色: 脱机)
浏览模式: 普通 | 列表

ASP.NET MVC Preview 4 分析 - 2. Filter

[ 2008-07-20 10:38:33 | 作者: yuhen ]
过滤器 (Filter) 是 MVC 的一个重要特征,它提供了非常灵活的扩展和解耦机制。P4 版的过滤器总算像那么回事了,同时做了更深度的划分,使得开发人员可以控制更多的细节和流程。

1. IActionFilter

主要用来干预 Action 的执行,我们可以通过上下文对象修改请求参数或者取消 Action 的执行。
public interface IActionFilter
{
  void OnActionExecuting(ActionExecutingContext filterContext);
  void OnActionExecuted(ActionExecutedContext filterContext);
}

默认实现是 ActionFilterAttribute,这也是我们开发自定义过滤器通常所用的基类。
[code][/code]...

阅读全文…

ASP.NET MVC Preview 4 分析 - 1. ActionInvoker

[ 2008-07-19 15:13:01 | 作者: yuhen ]
MVC 的执行核心是 ControllerActionInvoker,好在 P4 相比 P3 的变化要小了很多。

P3 ControllerActionInvoker.InvokeAction
public virtual bool InvokeAction(string actionName, IDictionary<string, object> values)
{
  // ...

  MethodInfo methodInfo = FindActionMethod(actionName, values);
  if (methodInfo != null)
  {
    IDictionary<string, object> parameters = GetParameterValues(methodInfo, values);
    IList<IActionFilter>
...

阅读全文…

让代码更简洁美观一点

[ 2008-07-12 13:39:24 | 作者: yuhen ]
1. using

如果你写过下面这样的代码,那么你可以省一点,起码不用过多的缩进。
using (SqlConnection conn = new SqlConnection())
{
  using (SqlConnection conn2 = new SqlConnection())
  {
  }
}

类型相同时,和我们一次声明多个同类型变量差不多。
using (SqlConnection conn = new SqlConnection(), conn2 = new SqlConnection())
{
}

如果类型不同,那么就写成下面这样。
using (MemoryStream stream = new MemoryStream())
using (SqlConnection conn = new SqlConnection())
...

阅读全文…

多普达 586W 微软手机硬起格机方法

[ 2008-07-11 18:56:59 | 作者: yuhen ]
今天出门办事,在地铁发了一条短信后就死机了。 [cry] 刚开始还以为是奥运安保系统的干扰,出地面后才发觉微软系统最大的优点再次上演了。 [sad] 关机,拆电池,拆SIM卡…… 总之所有的手段都试了,NND,丫就是停在开机蓝色界面就不动了。可怜我在高温下四处找电话…… 强烈鄙视!

-----------

多普达 586W 微软手机硬起格机方法

1.确定手机处于关机状态。
2.同时按住左右两个菜单键 (键盘的第一行),不要松开。
3.短按开机键,马上松开。
4.等待几秒,黑屏后会有操作提示按 0 键恢复出厂设置,松开左右菜单键,按 0 键确认。
5.等待几分钟,系统恢复出厂设置后会提示按 "确定" 键重启。

机内资料全部丢失~~~~ [no]

探微知著: Memory Layout (7)

[ 2008-07-05 14:20:46 | 作者: yuhen ]
首先告诉我,有关接口 (Interface) 你都知道些什么?设计模式、接口依赖、显式接口方法…… 还是其他什么?很显然,这回要说的不是这些。我们要琢磨的是这小坏蛋的本来面目,顺便透露一点不为人知的小秘密。嘿嘿...
interface I1
{
  void Test1();
  void Test2();
}

interface I2
{
  void Test2();
}

interface I3
{
  void Test3();
}

class A : I1, I2
{
  public void Test1() { }
  void I1.Test2() { }
  void I2.Test2() { }
}

class B : A, I3
{
  public void Test3() { }
}

public class Program
{
...

阅读全文…

探微知著: Memory Layout (6)

[ 2008-07-03 11:13:07 | 作者: yuhen ]
在前面的章节中,我们一直在忽略或者规避一个话题,那就是 "静态字段"。静态字段不属于对象实例,且在应用程序域 (AppDomain) 里是唯一的存在,那么它的内存布局方式肯定有诸多特殊之处。

静态字段的内存布局方式在不同的 CLR 版本中有很大的差异,因此我一直无法确认一些技术细节。在 CLR 2.0 中,应用程序域内所有类型的静态字段成员都被集中存储到某个内存段,这和 1.x 直接存储(值或引用)在 Method Table 中完全不同。

(1) 所有类型的值类型静态字段以内联 (inline) 方式集中存储到 Loader Heap HighFrequencyHeap 中。
(2) 所有类型的引用类型静态字段实例在 GC Heap 中创建,它们的引用被 HanleTable 持有,这种行为被称之为 "Rooted to the GC handle"。
[code][/code]...

阅读全文…

探微知著: Memory Layout (5)

[ 2008-07-01 21:27:47 | 作者: yuhen ]
我们知道关键字 new 会阻断虚方法的继承,那么真实状况到底如何?还是像以前那样记忆几条 "飘飘忽忽" 的规则吗?
class A
{
  public virtual void Test()
  {
    Console.WriteLine("A.Test");
  }
}

class B : A
{
  public override void Test()
  {
    Console.WriteLine("B.Text");
  }
}

class C : B
{
}

public class Program
{
  static void Main(string[] args)
  {
    C c = new C();
    c.Test();

    A a = c;
    a.Test();
  }
}

输出:
B.Text
B.Text
...

阅读全文…

探微知著: Memory Layout (4)

[ 2008-07-01 09:01:42 | 作者: yuhen ]
通过前面几节,我们明白了一个真相,那就是对象实例 (内存) 仅仅表示一种数据状态,那么行为呢?在首次使用类型 (Class/Struct/Interface) 之前,CLR 类加载器 (ClassLoader) 会在 Loader Heaps 中为类型创建两个数据结构完全相同的表:方法表 (Method Table) 包含了对象的行为,也就是方法;EEClass 则是将对象绑定到元数据结构 (Metadata Structures)。两者共同组成了我们熟悉且无时无刻不在使用的 System.Type。

每个对象实例都有两个附加成员,其中之一就保存了方法表的地址。严格来说方法表里保存的并不仅仅是方法,还有其他的一些什么。我一直很奇怪,究竟是什么原因让那些 "老怪物" 给它取这个么以偏概全的名字~~~~ 实际上方法表中有个特定的区域名为方法槽表 (Method Slot Table),里面有一些地址指向一个个方法描述 ...

阅读全文…