2009-07-20 2 views
1

クラスにメソッドを追加する方法はありますか?それでも、それはまだベースクラスに継承されていますか?.Netクラスヘルパーメソッド

私は、ランダム化する必要があります一覧のオブジェクトの束を持っているつもりです

public class ListWithRandomize<T> : List<T> { 
    public void Randomize() { // Randomize function} 

} 

を次のようしています。 ListWithRandomizeオブジェクトに "Make"できるListオブジェクトを持つことは可能ですか?私はランダム化関数を静的にして、リストとして<>をパラメータとして取ることができますが、可能ならばクラスのメソッドとして持っていたいと思います。

ありがとうございました。

答えて

7

extension methodは、ソースにアクセスできない場合にクラスにメソッドを追加できる唯一の方法です。

拡張メソッドは、実際の型のメンバーではなく、ソースコードのように見えます。それは個人的な変数や内部変数にアクセスすることはできません。少なくとも、リフレクションがないわけではありませんが、おそらくそうしたくはありません。私はちょうどランダマイズ機能を静的にし、それがリスト<を取るかもしれないと仮定し

>パラメータとしてではなく、可能であれば、私は..クラスのメソッドとしてそれを持ってしたいと思います。

この場合、拡張方法がおそらく最も良い方法です。

+0

このボードが大好きです。ありがとうございました... – Rob

+0

それが私たちがここにいる理由です。 – Randolpho

2

拡張メソッドが必要なようなサウンド。

public static void Randomize(this List<T> list) 
{ 
    // ... 
} 

これはList<T>のインスタンスメソッドであることが表示される静的メソッドです。

1

extensionの方法はどうですか?

public static void Randomize<T>(This IList<T> list) 
{ 
    //randomize 
} 
2

ここでは、C# 3.0 Extension methodはあなたがここで達成しようとしていると思います。

public static class MyListExtension { 
    public static void Randomize(this List<T> list){...} 

} 
1

拡張メソッド。 ListにRandomizeメソッドを追加できます。このコードはここに書かれているので、それは納得できないかもしれません。しかし、それはあなたにスタートを与える必要があります。

public static class Extenstions 
{ 
    public static List<T> Randomize<T>(this List<T> list) 
    { 
     // randomize into new list here 
    } 
} 
関連する問題