クラスのインデックス(一歩一歩セットケース分析)

8909 ワード

ケース3:<ケーススタディ>
namespace _2011._12._19
{
class Program
{
static void Main(string[] args)
{
Box box = new Box(10, 20, 30);
Display(box[0],box[1],box[2]);
Console.WriteLine(box["High"]);
box[1] = 100;//set Width is 100
Display(box[0], box[1], box[2]);
box["high"] = 500;
Display(box[0], box[1], box[2]);
Console.WriteLine(box["High"]);

}

static void Display<T>(params T[] array)//
{
for (var i = 0; i < array.Length;i++ )
{
Console.WriteLine("box[{0}] is :{1}",i,array[i]);
}
}

}

class Box

{
public Box(double length, double width, double high)//
{
double_num[0] = length;
double_num[1] = width;
double_num[2] = high;
}
private string[] names = { "length","width","high"};// , ( ),

private double[] double_num = new double[3];

public double this[int index]
{
set
{
if (index >= 0 && (index < double_num.Length))
{
double_num[index] = value;
}

}

get
{
if (index < 0 || (index >= double_num.Length))
{
return -1;
}
else
{
return double_num[index];
}
}
}

public double this[string name]
{
get
{
int i = 0;
while((i<names.Length)&&(name.ToLower() !=names[i]))
{
++i;
}

return (i==names.Length)? -1:double_num[i];
}

set
{
int i = 0;
while ((i < names.Length) && (name.ToLower() != names[i]))
{
++i;
}
if (i != names.Length)
{
double_num[i] = value;
}
}
}
}
}
/*
The Result:
box[0] is :10
box[1] is :20
box[2] is :30
30
box[0] is :10
box[1] is :100
box[2] is :30
box[0] is :10
box[1] is :100
box[2] is :500
500
*/

1.プログラムはMain関数入口2に入る.Boxクラスの変数を宣言し、オブジェクトを新規作成し、そのオブジェクトのメモリアドレス3を指すようにします.注意:このときはクラスに入り、まずクラスの変数、すなわち初期化インスタンス(オブジェクト)注意:private int i;ここでは変数を宣言するだけで、初期化されていないので、初期化されません.ここの配列はなぜ初期化されたのか.
private string[] names = { "length","width","high"};// , , 
private double[] double_num = new double[3];

4.ステップ4は、クラスの変数メンバーに5を割り当てるコンストラクション関数を実行することです.Displayメソッドが呼び出され、このときは直接パラメータを渡す方法ではなく、クラス内のGet属性を先に行って判断し、合法的な読み取りでメソッドに渡す(いくつかの変数が何回か判断する).その後、メソッドの実行プロセスを呼び出し、一連の動作7を完了する.Console.WriteLine(box["High"]);これはConsoleクラスを呼び出す方法であり、同様に、クラスのGet属性を先に行って合法かどうかを判断し、インデックス内のインデックス番号がどんな属性であるかによって、文字列タイプであれば、対応するインデックス8に渡す.コードを詳しく説明します.
get
{
int i = 0;
while((i<names.Length)&&(name.ToLower() !=names[i]))
{
++i;
}

return (i==names.Length)? -1:double_num[i];
}

:i