C#演算子リロードとインデックス
一、演算子の再ロード
前回のブログの記述に続いて、演算子のリロードを見て、前回のブログで述べたように、実は1つの方法の異なる状況に対する処理過程です.
演算子のリロードは新しい定義演算子の意味であり、総じて言えば演算子の役割を元の役割と少し異なるようにするが、表現の方法は同じであり、リロードされた論理演算子はペアで現れる必要があることに注意しなければならない.
==と!>と<=<と>=など
例を挙げます.private const double Epsilon=0.0000001;
public static bool operator ==(vector lhs, vector rhs)
{
if (system.math.abs(lhs.x-rhs.x)<epsilon&&system.math.abs(lhs.y-rhs.y)<Epsilon&&system.math.abs(lhs.z-rhs.z)<Epsilon)
return true;
else
return false;
}
public static bool operator !=(vector lhs,vector rhs)
{
return !(lhs==rhs);
}
このうちlhsとrhsはオペレータの左右の操作数であり、再定義されたのは2つの操作数の関係であることに注意し、ここでは論理関係であることに注意するが、具体的な実現状況はあまり明らかではなく、彼が機能を書き換えることができることを知っただけであり、オペレータの特徴の下で書き換えるだけであり、例えば論理演算出力の結果は1または0などである.
二、インデックス
インデックスは一般的に宣言オブジェクトの記号であり、配列を例にとると、格納されているデータで表すこともできるし、配列の下付きでこのオブジェクトを表すこともできる.これがインデックスの役割である.実際の使い方は次のとおりです.[ ] this [ ]
{
get{};
set{};
}
ここでgetはインデックスを取得して取得するために使用され、setはインデックスを取得して追加するために使用されます.
次の写真の例は非常にイメージされています.class Photo
{
string_title;
public Photo(string title)
{
this._title=title;
}
public string Title
{
get
{
return _title;
}
}
}
class Album
{
Photo[] photos;
public Album (int capacity)
{
photos =new Photo[capacity];
}
public Photo this [index]
{
get
{
if (index<0||index>=photos.Length)
{
console.WriteLine(" ");
return null;
}
return photos[index];
}
set
{
if(index<=0||index>=photos.Length)
{
console.writeLine (" ");
return;
}
photos[index]=value;
}
}
}
static void Main(string[] args)
{
Album friends = new Album(3);
Photo first =new Photo("Jenn");
Photo second=new Photo("Smith");
Photo third=new Photo("Mark");
friends[0]=frist;
friends[1]=second;
friends[2]=third;
Photo obj1Photo =friends[2];
console.writeline(obj1Photo.Title);
Photo obj2Photo =friends["Jenn"];
console.writeline(obj2Photo.Title);
}
この例では、アルバム(album)というクラスにインデックスがあり、photo[index]と宣言されています.その中のindexは写真オブジェクトのシーケンス番号を表しています.写真を検索するときはインデックスで調べることも、名前で調べることもできます.これがインデックスの役割です.
三、まとめ
この2つの例の具体的な応用をまとめることで,先に学習したコンテンツ応用と別の使い方が分かったが,それ以外はthisを用いてインデックスを用いることが珍しく,オブジェクト向けのプログラミングにはまだまだ学ぶべきことが多いようだ.
private const double Epsilon=0.0000001;
public static bool operator ==(vector lhs, vector rhs)
{
if (system.math.abs(lhs.x-rhs.x)<epsilon&&system.math.abs(lhs.y-rhs.y)<Epsilon&&system.math.abs(lhs.z-rhs.z)<Epsilon)
return true;
else
return false;
}
public static bool operator !=(vector lhs,vector rhs)
{
return !(lhs==rhs);
}
インデックスは一般的に宣言オブジェクトの記号であり、配列を例にとると、格納されているデータで表すこともできるし、配列の下付きでこのオブジェクトを表すこともできる.これがインデックスの役割である.実際の使い方は次のとおりです.
[ ] this [ ]
{
get{};
set{};
}
ここでgetはインデックスを取得して取得するために使用され、setはインデックスを取得して追加するために使用されます.
次の写真の例は非常にイメージされています.
class Photo
{
string_title;
public Photo(string title)
{
this._title=title;
}
public string Title
{
get
{
return _title;
}
}
}
class Album
{
Photo[] photos;
public Album (int capacity)
{
photos =new Photo[capacity];
}
public Photo this [index]
{
get
{
if (index<0||index>=photos.Length)
{
console.WriteLine(" ");
return null;
}
return photos[index];
}
set
{
if(index<=0||index>=photos.Length)
{
console.writeLine (" ");
return;
}
photos[index]=value;
}
}
}
static void Main(string[] args)
{
Album friends = new Album(3);
Photo first =new Photo("Jenn");
Photo second=new Photo("Smith");
Photo third=new Photo("Mark");
friends[0]=frist;
friends[1]=second;
friends[2]=third;
Photo obj1Photo =friends[2];
console.writeline(obj1Photo.Title);
Photo obj2Photo =friends["Jenn"];
console.writeline(obj2Photo.Title);
}
この例では、アルバム(album)というクラスにインデックスがあり、photo[index]と宣言されています.その中のindexは写真オブジェクトのシーケンス番号を表しています.写真を検索するときはインデックスで調べることも、名前で調べることもできます.これがインデックスの役割です.