首页 > 解决方案 > 在 C# 中使用与在 Java 中导入

问题描述

我来自 Java 和 C++ 背景。但是,我现在正在做一个 C# 应用程序,一件事让我感到困惑。

在 Java 中,当我导入包时,这意味着我可以访问放置在该包中的类。例如,这里我ArrayList从 package 导入了类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对象没有GetService功能。但是当我按下 时show potential fixes,它会建议我添加一个using声明。

在此处输入图像描述

这是真正的解决办法。但是,我的问题是这个using陈述对我的对象有什么影响?该对象是其类的实例。如何using在我的对象上添加语句效果并为其添加函数?

标签: javac#

解决方案


请注意,您在此处实际调用的扩展方法是:

accountDbContext.GetService<IRelationalDatabaseCreator>();

accountDbContext没有一个方法叫做GetService. GetService在 中声明AccessorExtensions,上面的行只是语法糖:

AccessorExtensions.GetService<IRelationalDatabaseCreator>(accountDbContext);

现在应该为声明扩展方法的类添加 using 指令以访问扩展方法是有意义的。


推荐阅读