*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

<C#>
「ユーザー定義クラスにIComparableインターフェイスを実装する際、順番比較をする対象のメンバー変数を指定するようにする。なお、比較対象のメンバー変数の指定は、メンバー変数の型の違いで、指定可能にする。そして、そのクラスの配列をComparisonデリゲートを使ってソートする。また、デリゲートを自由に切り替えられるようにする」

のコード

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

.






元のページ


元ページ「<C#> ユーザー定義クラスにIComparableインターフェイスを実装する際、順番比較をする対象のメンバー変数を指定するようにする。なお、比較対象のメンバー変数の指定は、メンバー変数の型の違いで、指定可能にする。そして、そのクラスの配列をComparisonデリゲートを使ってソートする。また、デリゲートを自由に切り替えられるようにする」
http://note.chiebukuro.yahoo.co.jp/detail/n142978

 

記述量上限の制限で、ページを分けて記述しています。







はじめに


元ページの

 

「<C#> ユーザー定義クラスにIComparableインターフェイスを実装する際、順番比較をする対象のメンバー変数を指定するようにする。なお、比較対象のメンバー変数の指定は、メンバー変数の型の違いで、指定可能にする。そして、そのクラスの配列をComparisonデリゲートを使ってソートする。また、デリゲートを自由に切り替えられるようにする」

 

におけるコードをここに記述します。








花情報クラスのコード




 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


// ユーザー定義クラスにIComparableインターフェイスを実装する際、順番比較をする対
// 象のメンバー変数を指定するようにする。
// なお、比較対象のメンバー変数の指定は、メンバー変数の型の違いで、指定可能にする。
// そして、そのクラスの配列をComparisonデリゲートを使ってソートする。
// また、デリゲートを自由に切り替えられるようにする。
namespace SortUserArrayWithComparison3
{

    // 花クラス
    // --- 花に関する各種情報を格納するクラス。
    //     及び、
    //     本クラスの配列において、並べ替えのために、2つのオブジェクト
    //     を比較するメソッドを実装するクラス。
    public class Flower : IComparable, IComparable<Flower>, IComparable<int>
    {

        public string Name; // 花名
        public int NumberOfStock;  // 在庫数
        public float NumberOfSales;   // 月間販売数平均値


        // 並び順比較メソッド
        // 本クラすを配列にした時、並べ替え順序での位置が、比較対象のオブジェクトと比べて前か、後か、
        // または同じかを示す整数を返します。すなわち、本メソッドは、配列要素の並べ替えを行なう際に、
        // 要素と要素の順番を決める比較基準を定義するメソッドです。
        //
        // < 引数 >
        //  第1引数: このインスタンスと比較するオブジェクト
        //
        // < 戻り値 >
        //  0より小さい値の場合: このインスタンスは、並べ替え順序において 引数other の前になります。
        //  0: このインスタンスは、並べ替え順序で、引数other と同じ位置に出現します。
        //  0より大きい値の場合: このインスタンスは、並べ替え順序において 引数other の後になります。
        //
        public int CompareTo(Flower other)
        {
            // 比較の定義
            if (this.NumberOfStock < other.NumberOfStock) return 1;
            else if (this.NumberOfStock > other.NumberOfStock) return -1;
            else return 0;
        }

 

        // 並び順比較メソッド
        // 本クラすを配列にした時、並べ替え順序での位置が、比較対象のオブジェクトと比べて前か、後か、
        // または同じかを示す整数を返します。すなわち、本メソッドは、配列要素の並べ替えを行なう際に、
        // 要素と要素の順番を決める比較基準を定義するメソッドです。
        //
        // < 引数 >
        //  第1引数: このインスタンスと比較するオブジェクト
        //
        // < 戻り値 >
        //  0より小さい値の場合: このインスタンスは、並べ替え順序において 引数other の前になります。
        //  0: このインスタンスは、並べ替え順序で、引数other と同じ位置に出現します。
        //  0より大きい値の場合: このインスタンスは、並べ替え順序において 引数other の後になります。
        //
        public int CompareTo(int other)
        {
            // 比較の定義
            if (this.NumberOfStock > other) return 1;
            else if (this.NumberOfStock < other) return -1;
            else return 0;
        }

 

        // 並び順比較メソッド
        // 本クラすを配列にした時、並べ替え順序での位置が、比較対象のオブジェクトと比べて前か、後か、
        // または同じかを示す整数を返します。すなわち、本メソッドは、配列要素の並べ替えを行なう際に、
        // 要素と要素の順番を決める比較基準を定義するメソッドです。
        //
        // < 引数 >
        //  第1引数: このインスタンスと比較するオブジェクト
        //
        // < 戻り値 >
        //  0より小さい値の場合: このインスタンスは、並べ替え順序において 引数other の前になります。
        //  0: このインスタンスは、並べ替え順序で、引数other と同じ位置に出現します。
        //  0より大きい値の場合: このインスタンスは、並べ替え順序において 引数other の後になります。
        //
        public int CompareTo(float other)
        {
            // 比較の定義
            if (this.NumberOfSales > other) return 1;
            else if (this.NumberOfSales < other) return -1;
            else return 0;
        }

 

        // 並び順比較メソッド
        // 本クラすを配列にした時、並べ替え順序での位置が、比較対象のオブジェクトと比べて前か、後か、
        // または同じかを示す整数を返します。すなわち、本メソッドは、配列要素の並べ替えを行なう際に、
        // 要素と要素の順番を決める比較基準を定義するメソッドです。
        //
        // < 引数 >
        //  第1引数: このインスタンスと比較するオブジェクト
        //
        // < 戻り値 >
        //  0より小さい値の場合: このインスタンスは、並べ替え順序において 引数other の前になります。
        //  0: このインスタンスは、並べ替え順序で、引数other と同じ位置に出現します。
        //  0より大きい値の場合: このインスタンスは、並べ替え順序において 引数other の後になります。
        //
        public int CompareTo(string other)
        {
            // 比較の定義
            return this.Name.CompareTo(other);
        }


        // 並び順比較メソッド
        // 本クラすを配列にした時、並べ替え順序での位置が、比較対象のオブジェクトと比べて前か、後か、
        // または同じかを示す整数を返します。すなわち、本メソッドは、配列要素の並べ替えを行なう際に、
        // 要素と要素の順番を決める比較基準を定義するメソッドです。
        //
        // < 引数 >
        //  第1引数: このインスタンスと比較するオブジェクト
        //
        // < 戻り値 >
        //  0より小さい値の場合: このインスタンスは、並べ替え順序において 引数other の前になります。
        //  0: このインスタンスは、並べ替え順序で、引数other と同じ位置に出現します。
        //  0より大きい値の場合: このインスタンスは、並べ替え順序において 引数other の後になります。
        //
        public int CompareTo(object other)
        {

            // 引数がnullの場合はArgumentNullExceptionをスローする
            if (other == null) throw new ArgumentNullException();


            // 引数のオブジェクトの型が、本クラスFlowerの場合
            if (other.GetType() == this.GetType())
            {
                // object型の引数をFlower型に型変換する
                Flower OtherWork = (Flower)other;

                // Flower型引数の場合の並び順比較メソッドを実行
                return CompareTo(OtherWork);
            }
            // 引数のオブジェクトの型が、string型の場合
            else if (other.GetType() == typeof(string))
            {
                // object型の引数をstring型に型変換する
                string OtherWork = (string)other;

                // string型引数の場合の並び順比較メソッドを実行
                return CompareTo(OtherWork);
            }
            // 引数のオブジェクトの型が、string型の場合
            else if (other.GetType() == typeof(int))
            {
                // object型の引数をint型に型変換する
                int OtherWork = (int)other;

                // int型引数の場合の並び順比較メソッドを実行
                return CompareTo(OtherWork);
            }
            // 違う型の場合
            else
            {
                // 引数がFlower型でなかった場合はArgumentExceptionをスローする
                throw new ArgumentException();
            }


            //return 0;

        }

    }


}

 





 

さいごに


本ページの内容説明については、元ページを参照して下さい。