2014年1月30日 星期四

[C#] 題目練習Q&A part 1.


1. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。
答 .
 private : 私有成員, 在類別的內部才可以使用。 
protected : 保護成員,該類別內部和繼承的類別可以使用。 
public : 公開成員,外界可存取。 
internal: 在同一命名空間內可以訪問。

2 .列舉ASP.NET 頁面之間傳遞值的幾種模式。 
答. 1.使用QueryString; Request["  "] 
      2.使用Session 、 Application
      3.使用Server.Transfer()  //記得使用這個網頁不會變動

3. 一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸算法實現。
答︰
  1. Console.WriteLine(foo(30));
  2. //////////////////////////////////////////////////
  3. static int foo(int i)
  4.         {
  5.             if (i == 1 || i == 2)
  6.             {
  7.                 return 1;
  8.             }
  9.             if (i >= 3)
  10.             {
  11.                 return foo(i - 1) + foo(i - 2);
  12.             }
  13.             else
  14.             {
  15.                 return 0;
  16.             }
  17.                
  18.         }



3.override與overloading的區別
答 ︰
overloading是方法的名稱相同 : 參數或參數類型不同。
override 是覆蓋基礎類別的函數。


4.請實做一個冒泡排序算法?
答︰
  1. ///氣泡排序法
  2.             ///
  3.             int[] ary = new int[10]{1,2,3,4,5,6,7,8,9,10};
  4.             for (int i = 0; i < ary.Length-1; i++)
  5.             {
  6.                 for (int j = i+1; j < ary.Length; j++)
  7.                 {
  8.                     if(ary[i] < ary[j])
  9.                     {
  10.                         int temp = ary[i];
  11.                         ary[i] = ary[j];
  12.                         ary[j] = temp;
  13.                     }
  14.                 }
  15.             }


5.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
答︰可以用任意類型。

6.求以下表達式的值,寫一種或幾種實現方法︰ 1-2+3-4+……+m
答︰
  1. Console.WriteLine( getNum(10));
  2. /////////////////////////////////////////
  3.  static int getNum(int m)
  4.         {
  5.             if (m % 2 == 0)
  6.             {
  7.                 return m / (-2);
  8.             }
  9.             else
  10.             {
  11.                 return (m + 1) / 2;
  12.             }
  13.         }

待續...

2014年1月29日 星期三

[C#] ArrayList 和 List 集合型別

來源 : MSDN

System.Collections. ArrayList 或 System.Collections.Generic. List< T> 物件是一個複雜版本的陣列。 ArrayList 類別和 List< T> 泛型類別提供的部分功能在大部分 System.Collections 類別中也都有提供 (但 Array 類別除外)。 例如:
另一方面, Array 提供了某些 ArrayList 和 List< T> 所沒有的彈性。例如:
  • 您可以設定 Array 的下限,但 ArrayList 或 List< T> 的下限永遠為零。
  • Array 可以有多個維度,但 ArrayList 或 List< T> 則永遠只有一個維度。不過,您可以輕鬆地建立陣列的清單或清單的清單。
  • 特定類型的 Array (而不是 Object) 提供比 ArrayList 更高的效能。 這是因為 ArrayList 的項目是 Object 型別,因此當您儲存或擷取值型別時,通常會發生 boxing 和 unboxing。 然而, List< T> 在不需要重新配置的情況下 (亦即估計的初始容量很接近清單最大大小),可提供與相同型別的陣列相近的效能。
大部分情況下,可以使用 ArrayList 或 List< T> 來取代陣列呼叫;它們比較容易使用,並且一般而言,具有與相同型別的陣列相似的效能。
Array 位於 System 命名空間 (Namespace); ArrayList 位於 System.Collections 命名空間; List< T> 位於 System.Collections.Generic 命名空間。

List 練習 : 


  1. ///List<t>  Proram...
  2.             ///
  3.             member andy = new member("andy", "taipei");
  4.             member way = new member("luo", "taipei");
  5.             //用泛型List 來添加自訂物件類別
  6.             List<member> member1 = new List<member>(5) { andy, way };
  7.             //Add()方式
  8.             member1.Add(new member("shomin", "china"));
  9.             //展示
  10.             Console.WriteLine(member1[0].ToString());
  11.             Console.WriteLine("--------------------------");
  12.             //insert(index,item)
  13.             member1.Insert(1, new member("insert", "unknow"));
  14.             //.Count 數量 & Iist<T>有實做IEnumerable介面 所以可以用迴圈
  15.             for (int i = 0; i < member1.Count; i++)
  16.             {
  17.                 Console.WriteLine(member1[i].ToString());
  18.             }
  19.             Console.WriteLine("--------------------------");
  20.            
  21.             //刪除
  22.             member1.RemoveAt(1);
  23.             //必須實作Icomparable
  24.             member1.Sort();
  25.  
  26.             for (int i = 0; i < member1.Count; i++)
  27.             {
  28.                 Console.WriteLine(member1[i].ToString());
  29.             }
  30.             Console.WriteLine("--------------------------");
  31.            
  32.             //實作Icomparer<T>
  33.             member1.Sort(member.按名字排序);
  34.             for (int i = 0; i < member1.Count; i++)
  35.             {
  36.                 Console.WriteLine(member1[i].ToString());
  37.             }
  38.             Console.WriteLine("--------------------------");
  39.             member1.Sort(member.按城市排序);
  40.             for (int i = 0; i < member1.Count; i++)
  41.             {
  42.                 Console.WriteLine(member1[i].ToString());
  43.             }
  44.  
  45.  
  46. ///另外做class
  47.         public class member : IComparable
  48.         {
  49.  
  50.             public string name { get; set; }
  51.             public string city { get; set; }
  52.             private static IComparer<member>[] ary = {
  53.                                       new Sortname(),
  54.                                       new Sortcity()
  55.                                       };
  56.  
  57.            
  58.             public static IComparer<member> 按名字排序
  59.             {
  60.                 get
  61.                 {
  62.                     return ary[0];
  63.                 }
  64.             }
  65.  
  66.             public static IComparer<member> 按城市排序
  67.             {
  68.                 get
  69.                 {
  70.                     return ary[1];
  71.                 }
  72.             }
  73.  
  74.             public member (string name, string city){
  75.                 this.name = name;
  76.                 this.city = city;
  77.             }
  78.  
  79.             public override string ToString()
  80.             {
  81.                 return string.Format("名稱:{0} 居住:{1}", name, city);
  82.             }
  83.  
  84.  
  85.             //實作IComparable
  86.             public int CompareTo(object obj)
  87.             {
  88.                 member x = obj as member;
  89.                 return this.name.CompareTo(x.name);
  90.             }
  91.  
  92.             class Sortname : IComparer<member>
  93.             {
  94.                 public int Compare(member x, member y)
  95.                 {
  96.                     return string.Compare(x.name, y.name);
  97.                 }
  98.             }
  99.  
  100.             class Sortcity : IComparer<member>
  101.             {
  102.                 public int Compare(member x, member y)
  103.                 {
  104.                     return string.Compare(x.city, y.city);
  105.                 }
  106.             }
  107.  
  108.  
  109.         }