[Spring.NET IoC] 之五:列表參數

作者: Q.yuhen  來源: Q.yuhen  發布時間: 2008-12-25 23:16  閱讀: 4574 次  推薦: 1   原文鏈接   [收藏]  

我們可以在配置文件中向構造方法或者屬性注入列表型參數,諸如 Array、ArrayList、Hashtable 等。

1. IList

在 .NET Framework 中實現 IList 的主要是 Array、ArrayList。

<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.net
         http://www.springframework.net/xsd/spring-objects.xsd">

  <object id="HelloWorld" type="ConsoleApplication1.SpringNet.HelloWorld, Learn.CUI">
    <constructor-arg name="list">
      <list>
        <value>1</value>
        <value>2</value>
        <value>3</value>
        <value>4</value>
      </list>
    </constructor-arg>
  </object>
</objects>
public class HelloWorld
{
  public HelloWorld(IList list)
  {
    Console.WriteLine(list); // output: ArrayList
    foreach (object o in list)
      Console.WriteLine(o);
  }
}


我們會發現 Spring.NET IoC 缺省使用 ArrayList 來實現 IList 列表參數。

2. IDictionary

實現 IDictionary 的最常用類型是 Hashtable。

<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.net
         http://www.springframework.net/xsd/spring-objects.xsd">

  <object id="HelloWorld" type="ConsoleApplication1.SpringNet.HelloWorld, Learn.CUI">
    <constructor-arg name="dict">
      <dictionary>
        <entry key="1" value="a" />
        <entry key="2" value="b" />
        <entry key="3" value="c" />
        <entry key="4" value="d" />
      </dictionary>
    </constructor-arg>
  </object>
</objects>
public class HelloWorld
{
  public HelloWorld(IDictionary dict)
  {
    Console.WriteLine(dict); // output:System.Collections.Specialized.HybridDictionary
    foreach (object o in dict.Keys)
    {
      Console.WriteLine("{0}={1}", o, dict[o]);
    }
  }
}


看看 System.Collections.Specialized.HybridDictionary 的MSDN說明

在集合較小時,使用 ListDictionary 來實現 IDictionary,然后當集合變大時,切換到 Hashtable。
建議將該類用于字典中的元素數量未知的情況。它利用了 ListDictionary 處理小集合時性能改善的優點,同時也可靈活地切換到處理較大集合時能力比 ListDictionary 更好的 Hashtable。
如果集合的初始大小大于 ListDictionary 的最佳大小,那么集合立即存儲在 Hashtable 中,以避免將元素從 ListDictionary 復制到 Hashtable 產生的系統開銷。



不錯,考慮得很周詳。

1
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()