背景:
我有一个静态类,但是静态方法不是扩展方法。我决定将这些方法重构为扩展方法,不希望有任何代码中断,因为扩展方法可以像静态方法一样调用。但是,当静态导入用于保存扩展方法的静态类时,代码确实中断。
例子:
我有一个带有扩展方法和静态方法的静态类:
namespace UsingStaticExtensionTest.Extensions
{
static class ExtensionClass
{
internal static void Test1(this Program pg)
{
System.Console.WriteLine("OK");
}
internal static void Test2(Program pg)
{
System.Console.WriteLine("OK");
}
}
}
当我使用以下using指令时,测试程序中的所有内容都可以正常工作:
using UsingStaticExtensionTest.Extensions;
namespace UsingStaticExtensionTest
{
class Program
{
static void Main(string[] args)
{
var p = new Program();
ExtensionClass.Test1(p); // OK
p.Test1(); // OK
ExtensionClass.Test2(p); // OK
}
}
}
但是,当我使用静态导入using指令来仅标识带有扩展方法的类时,我不能将扩展方法调用为静态方法:
using static UsingStaticExtensionTest.Extensions.ExtensionClass;
class Program
{
static void Main(string[] args)
{
var p = new Program();
//Test1(p); // Error: The name Test1 does not exist in the current context
p.Test1(); // OK
Test2(p); // OK **I can still call the static method**
}
}
}
问题:
为什么在使用静态导入时不能将扩展方法作为静态方法调用?
最佳答案
因为语言设计:
使用静态使在指定类型中声明的扩展方法
可用于扩展方法查找。但是
扩展方法未导入不合格范围
代码中的引用。
using Directive
关于c# - 为什么在使用静态导入时不能将扩展方法称为静态方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38984853/