在重用類中實現方法時,方法應驗它的參數,對無效的參數,方法應該拋出一個派生自System.ArgumentException的異常類型。
為了構建一個安全的、健壯的類庫,接受可改參考型別的方法實際上應複製這些參數。
代碼
#define badcode
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
int[] denominators = { 1, 2, 3 };
ThreadPool.QueueUserWorkItem(Divide100By, denominators);
Thread.Sleep(50);
//外部改變參數
denominators[2] = 0;
Console.ReadLine();
}
private static void Divide100By(object o)
{
#if badcode
int[] denominators = (int[])o;
#else
int[] denominatorsinput=(int[])o;
int[] denominators=new int[denominatorsinput.Length];
Array.Copy(denominatorsinput,denominators,denominators.Length);
#endif
for (int index = 0; index < denominators.Length; index++)
{
if (denominators[index] == 0)
{
throw new ArgumentOutOfRangeException("denominators", string.Format("索引 {0} 處為 0", index));
}
}
Console.WriteLine("驗證通過 ");
Thread.Sleep(100);
//這裡denominators[0] 被外部改變為0
for (int index = 0; index < denominators.Length; index++)
{
Console.WriteLine("100 / {0} ={1}", denominators[index], 100 / denominators[index]);
}
}
}
解決方案已在上面