代码之家  ›  专栏  ›  技术社区  ›  MJBZA

在C中使用与在Java中导入

  •  0
  • MJBZA  · 技术社区  · 4 年前

    我来自java和C++背景。然而,我现在正在做一个C应用程序,有一件事让我很困惑。

    在Java中,当我导入一个包时,意味着我可以访问该包中的类。例如,这里我导入了 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应用程序有个问题 here . 在我看来,有趣的是,当我添加以下代码片段时:

    var accountDbContext = services.GetRequiredService<AccountDbContext>();
    accountDbContext.Database.EnsureCreated();
    var accountDbCreator = accountDbContext.GetService<IRelationalDatabaseCreator>();
    accountDbCreator.CreateTables();
    

    我看到一个错误如下:

    enter image description here

    “GetService”和最佳扩展方法重载 'ServiceProviderServiceExtensions.GetService(IServiceProvider)' 需要“IServiceProvider”类型的接收器

    accountDbContext 对象没有 GetService show potential fixes ,然后它建议我添加一个 using 声明。

    enter image description here

    这才是真正的解决办法。然而,我的问题是,这有什么影响 关于我目标的声明?对象是其类的实例化。如何添加 使用

    0 回复  |  直到 4 年前
        1
  •  4
  •   Sweeper    4 年前

    请注意,您实际上所说的 extension method 在这里:

    accountDbContext.GetService<IRelationalDatabaseCreator>();
    

    accountDbContext 没有调用的方法 GetService . GetService AccessorExtensions ,上面的一行只是语法糖:

    AccessorExtensions.GetService<IRelationalDatabaseCreator>(accountDbContext);