繁体   English   中英

在 C# 中使用与在 Java 中导入

[英]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的方法。 GetServiceAccessorExtensions中声明,上面的行只是语法糖:

AccessorExtensions.GetService<IRelationalDatabaseCreator>(accountDbContext);

现在,您需要为声明了扩展方法的 class 添加 using 指令,以便访问扩展方法,这应该是有意义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM