1

ネストされたメソッドを許可するカスタム.netクラスを作成する方法を探しています。

たとえば...リストを返す関数Yを持つクラスXがあるとします。次に、ソートされたリストを返す別の関数があります...

xy()。z()のようなことを実行できるようにしたいと思います。ここで、zはy()の出力を入力として受け入れます。

基本的に、.toLower()または.toUpper()を任意の文字列に追加する方法。

私はそれをグーグルしようとしていますが、正しい質問をしているのかどうかさえわかりません。

ありがとう

4

4 に答える 4

1

拡張メソッドが探しているものかもしれません (y() の出力を受け入れることができます) が、それは使用している .NET のバージョンによって異なります。

したがって、y をパラメーターとして受け取る x という拡張メソッドを作成する場合は、次のメソッドを作成します。

public static object z(input as y)
{
    //do your manipulations here
}

したがって、関数で並べ替えを行う場合は、並べ替えメソッドを呼び出し、オブジェクト y を渡し、並べ替えられたオブジェクトを返します。

于 2009-01-19T06:41:30.027 に答える
0

asp.net vb では、次のようにクラスの代わりにモジュールを使用できます。

    Imports System.Runtime.CompilerServices
    Public Module Extensions
       <Extension()> _
       Public Function extendedMethod(ByRef input As String) As String
           Return input & "extended method"
       End Function
    End Module

次に、コード ビハインドで、他のクラスと同じようにインポートします。

    Imports Extensions
    Partial Class _Default
    Inherits System.Web.UI.Page
       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim st As String = "a string "
        Response.Write(st.ToUpper.extendedMethod)
       End Sub
    End Class

この場合、.toUpper() または .toLower() を使用するのと同じ方法で、任意の文字列値に対してモジュールの「extendedMethod」メソッドを使用できます。

于 2009-01-19T20:30:03.443 に答える
0

起こる必要がある魔法は何もありません。クラス A にクラス B のオブジェクトを返すメソッドがある場合、A の関数のメソッドを直接呼び出すことができます。

与えられた:

public static class MyClass     
{
  public MyList getList()
  {
    MyList retVal = new MyList();
    ...
    return retVal;
  }
}

public class MyList
{
    public MyList sort()
    {
        // Sort list
        ...
        return sortedList;
    }
}

次に、これは合法です: MyList list = MyClass.getList().sort();

于 2009-01-19T09:27:05.980 に答える
0

スティーブは正しいです (しゃれは意図していません): 拡張メソッドは、あなたが求めているものです。C# では、次のようにします。

namespace ExtensionsNamespace; // Name this whatever you want.
public static class ListExtensions // must be public static!
{
    // must be public static and the first parameter needs a "this"
    public static IList<T> ToOrderedList<T>(this IList<T> originalList, IComparer<T> comparer)
    {
        // Code to take the original list and return an ordered version
    }
}

そして、あなたのコードで:

using ExtensionsNamespace;
...
IComparer<Book> comparer = GetBookComparer();
IList<BooK> books = GetBookList().ToOrderedList(comparer);

特定のケースで独自の比較クラスを作成する必要を回避するために、ラムダ式を使用して実行できる追加のことがいくつかあります。ただし、車輪を再発明する前に、LINQ to Objects を検討することをお勧めします。LINQ to Objects には、これらの機能が多数組み込まれています。たとえば、次のようになります。

using System.Linq;
...
IEnumerable<Book> booksInOrder1 = GetBookList().OrderBy(b => b.Title);

それはあなたの質問に答えていますか?

于 2009-12-17T00:14:54.137 に答える