[英]using in C# vs. import in Java
我来自 Java 和 C++ 背景。 但是,我目前正在做一个 C# 应用程序,有一件事让我感到困惑。
在 Java 中,当我导入 package 时,这意味着我可以访问放置在该 package 中的类。 比如这里我从package Z93F725A07423FE1C889F448B33D2util中导入了ArrayList
java.util
。
import java.util.ArrayList;
class ArrayListUtilization {
public static void main(String[] args) {
ArrayList<Integer> myList = new ArrayList<>(3);
myList.add(3);
myList.add(2);
myList.add(1);
System.out.println(myList);
}
}
最近我在我的 c-sharp 应用程序中遇到了一个问题,我在这里问过。 在我看来,有趣的是,当我添加以下代码片段时:
var accountDbContext = services.GetRequiredService<AccountDbContext>();
accountDbContext.Database.EnsureCreated();
var accountDbCreator = accountDbContext.GetService<IRelationalDatabaseCreator>();
accountDbCreator.CreateTables();
我看到如下错误:
错误 CS1929“AccountDbContext”不包含“GetService”的定义,并且最佳扩展方法重载“ServiceProviderServiceExtensions.GetService(IServiceProvider)”需要“IServiceProvider”类型的接收器
从错误文本中,我了解到accountDbContext
object 没有GetService
function。 但是当我按下show potential fixes
时,它会建议我添加一个using
语句。
这是真正的解决办法。 但是,我的问题是这个using
语句对我的 object 有什么影响? object 是其 class 的实例化。 如何在我的 object 上添加using
语句效果并向其添加 function?
请注意,您在此处实际调用的扩展方法是:
accountDbContext.GetService<IRelationalDatabaseCreator>();
accountDbContext
没有名为GetService
的方法。 GetService
在AccessorExtensions
中声明,上面的行只是语法糖:
AccessorExtensions.GetService<IRelationalDatabaseCreator>(accountDbContext);
现在,您需要为声明了扩展方法的 class 添加 using 指令,以便访问扩展方法,这应该是有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.