是否可以使用静态类对扩展方法进行分组?

时间:2019-07-11 00:06:01

标签: c#

添加扩展方法很简单,方法如下:

public static class MyStringExtensions
{
    public static string MyMethodOne(this string aSource)
    {
        return aSource += "My Method One";
    }

    public static string MyMethodTwo(this string aSource)
    {
        return aSource += "My Method Two";
    }
}

,可调用为:

"some string".MyMethodOne();
"some string".MyMethodTwo();

但是我有很多方法,并且想使用静态类容器对它们进行“分组”:

public static class MyStringExtensionsGroup
{
    public static string MethodOne(string aSource)
    {
        return aSource += "My Method One";
    }

    public static string MethodTwo(string aSource)
    {
        return aSource += "My Method Two";
    }
}

因此,假设我以某种方式将My : MyStringExtensionsGroup公开为字符串扩展名,那么我可能会使用以下约定(注意My之后的句点)进行调用:

"some string".My.MethodOne();
"some string".My.MethodTwo();

说我还有另一个名为“''MyOtherGroup'''的分组,然后我可以这样做:

"some string".MyOtherGroup.MethodOne();
"some string".MyOtherGroup.MethodTwo();

使用C#当前提供的扩展方法是否可以对扩展方法进行“分组”?

1 个答案:

答案 0 :(得分:1)

扩展方法不能是嵌套,但是如果不加考虑,可以创建自己的流利语法

扩展名

public static class MyStringExtensionsGroup
{
   public static string MethodOne(this Group1 group) => group.Source + "My Method One";
   public static string MethodTwo(this Group2 group) => group.Source + "My Method Two";
   public static Group1 Group1(this string source) => new Group1(source);
   public static Group2 Group2(this string source) => new Group2(source);
}

public class Group1
{
   public string Source { get; }
   public Group1(string source) => Source = source;
}

public class Group2
{
   public string Source { get; }
   public Group2(string source) => Source = source;
}

或者..您可以将您的方法填充到更整洁的类中

public class Group1
{
   public string Source { get; }
   public Group1(string source) => Source = source;
   public string MethodOne() => Source + "My Method One";
   public string MethodTwo() => Source + "My Method Two";
}

public class Group2
{
   public string Source { get; }
   public Group2(string source) => Source = source;
   public string MethodOne() => Source + "My Method One";
   public string MethodTwo() => Source + "My Method Two";
}

两种用法都相同

用法

var someString = "asd";
Console.WriteLine(someString.Group1().MethodOne());
Console.WriteLine(someString.Group2().MethodTwo());

注意 :还有其他方法和结构可以做到这一点,但是,如果您想钻进这个兔子洞,这将带您入门

总而言之,我完全不会这样做:)