添加扩展方法很简单,方法如下:
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#当前提供的扩展方法是否可以对扩展方法进行“分组”?
答案 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());
注意 :还有其他方法和结构可以做到这一点,但是,如果您想钻进这个兔子洞,这将带您入门
总而言之,我完全不会这样做:)