asp.net中的自定义嵌套属性/方法

asp.net中的自定义嵌套属性/方法,asp.net,properties,class,methods,nested,Asp.net,Properties,Class,Methods,Nested,我正在寻找一种方法来编写一个允许嵌套方法的自定义.net类 例如。。。假设我有一个类X和一个返回列表的函数Y。然后我有另一个函数返回一个排序列表 我希望能够像x.y().z()这样做,其中z将接受y()的输出作为其输入 基本上,可以将.toLower()或.toUpper()附加到任何字符串上 我试图用谷歌搜索它,但我甚至不确定我问的问题是否正确 谢谢您可能正在寻找扩展方法(可以接受y()的输出),但这取决于您使用的.NET版本 因此,如果您想创建一个名为x的扩展方法,该方法以y为参数,您可以创

我正在寻找一种方法来编写一个允许嵌套方法的自定义.net类

例如。。。假设我有一个类X和一个返回列表的函数Y。然后我有另一个函数返回一个排序列表

我希望能够像x.y().z()这样做,其中z将接受y()的输出作为其输入

基本上,可以将.toLower()或.toUpper()附加到任何字符串上

我试图用谷歌搜索它,但我甚至不确定我问的问题是否正确


谢谢

您可能正在寻找扩展方法(可以接受y()的输出),但这取决于您使用的.NET版本

因此,如果您想创建一个名为x的扩展方法,该方法以y为参数,您可以创建一个方法:

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

因此,如果希望函数进行排序,可以调用sort方法,传递对象y,然后返回已排序的对象。

扩展方法可能是您要查找的(可以接受y()的输出),但这取决于您使用的.NET版本

因此,如果您想创建一个名为x的扩展方法,该方法以y为参数,您可以创建一个方法:

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

因此,如果希望函数进行排序,可以调用sort方法,传递对象y,然后返回已排序的对象。

没有什么神奇的事情需要发生。如果类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()

没有什么神奇的事情需要发生。如果类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()

在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
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
    }
}

在这种情况下,您可以对任何字符串值使用模块中的“extendedMethod”方法,方法与在asp.net vb中使用.toUpper()或.toLower()的方法相同。您可以使用模块,而不是像这样的类:

    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
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
    }
}
在这种情况下,您可以对任何字符串值使用模块中的“extendedMethod”方法,方法与使用.toUpper()或.toLower()的方法相同。Steve是对的(没有双关语):扩展方法就是您所要求的。在C#中,您可以这样做:

    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
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
    }
}
名称空间扩展名称空间;//随便你叫什么名字都行。
public static类ListExtensions//必须是public static!
{
//必须是public static,并且第一个参数需要一个“this”
公共静态IList ToOrderedList(此IList原始列表、IComparer比较器)
{
//获取原始列表并返回有序版本的代码
}
}
然后在代码中:

using ExtensionsNamespace;
...
IComparer<Book> comparer = GetBookComparer();
IList<BooK> books = GetBookList().ToOrderedList(comparer);
使用扩展名称空间;
...
IComparer comparer=GetBookComparer();
IList books=GetBookList().ToOrderedList(比较器);
在某些情况下,您可以使用lambda表达式做一些额外的事情,以避免编写自己的比较器类,等等。然而,在你重新发明轮子之前,我建议你看看LINQtoObjects,它已经内置了很多这样的功能。例如:

using System.Linq;
...
IEnumerable<Book> booksInOrder1 = GetBookList().OrderBy(b => b.Title);
使用System.Linq;
...
IEnumerable booksInOrder1=GetBookList().OrderBy(b=>b.Title);
这回答了你的问题吗?

史蒂夫是对的(没有双关语):扩展方法就是你想要的。在C#中,您可以这样做:

    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
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
    }
}
名称空间扩展名称空间;//随便你叫什么名字都行。
public static类ListExtensions//必须是public static!
{
//必须是public static,并且第一个参数需要一个“this”
公共静态IList ToOrderedList(此IList原始列表、IComparer比较器)
{
//获取原始列表并返回有序版本的代码
}
}
然后在代码中:

using ExtensionsNamespace;
...
IComparer<Book> comparer = GetBookComparer();
IList<BooK> books = GetBookList().ToOrderedList(comparer);
使用扩展名称空间;
...
IComparer comparer=GetBookComparer();
IList books=GetBookList().ToOrderedList(比较器);
在某些情况下,您可以使用lambda表达式做一些额外的事情,以避免编写自己的比较器类,等等。然而,在你重新发明轮子之前,我建议你看看LINQtoObjects,它已经内置了很多这样的功能。例如:

using System.Linq;
...
IEnumerable<Book> booksInOrder1 = GetBookList().OrderBy(b => b.Title);
使用System.Linq;
...
IEnumerable booksInOrder1=GetBookList().OrderBy(b=>b.Title);
这回答了你的问题吗