zoukankan      html  css  js  c++  java
  • 如何使用不同dll的相同namespace下的相同接口

    问题:

    程序里加载了2个dll,这2个dll里都声明了同样的命名空间(这个不违法),然后在这个同样的命名空间下,他俩又定义了同名的interface。

    然后我程序里直接using这个命名空间,使用这个interface的时候就有问题了,因为它已经被定义在2个地方了。

    有没有啥语法可以显示指出我使用哪个dll里的命名空间里的该类型?

    解决办法:

    1. 用alias。

    Main App:

    extern alias Lib1;
    extern alias Lib2;
    using System;
     
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine((new Lib1::MS.Lib.Class1()).Run());
                Console.WriteLine((new Lib2::MS.Lib.Class1()).Run());
            }
        }
    }

    主程序设置。

    Lib1:

    namespace MS.Lib
    {
        public class Class1
        {
            public string Run()
            {
                return "MS.Lib1.Class1Run().";
            }
        }
    }

    Lib 2:

    namespace MS.Lib
    {
        public class Class1
        {
            public string Run()
            {
                return "MS.Lib2.Class1Run().";
            }
        }
    }

    2. 用property DllImport如下:把Lab1 封到另一个namespace下。直接被主程序调用。


        [DllImport("Lab1.dll", EntryPoint = "ChangeWindowMessageFilter", SetLastError = true)]
            [returnMarshalAs(UnmanagedType.Bool)]
            private static extern bool _ChangeWindowMessageFilter(WM message, MSGFLT dwFlag);


  • 相关阅读:
    关于CLR、CIL、CTS、CLS、CLI、BCL和FCL
    (DateTime)日期型数据转换成C#长整型数据
    List<T>.FindIndex 方法 (Predicate<T>)
    C#用int的0--31位表示32个bool值,int拆分成bool数组
    C# 协程 WaitForSeconds产生GC(Garbage Collection)问题
    Unity3D教程:尽量避免使用foreach
    NGUI中button无法用find函数找到
    Vue + axios + SpringBoot 2实现导出Excel
    Kafka 0.10.1版本源码 Idea编译
    Gradle Wrapper
  • 原文地址:https://www.cnblogs.com/riskyer/p/3320251.html
Copyright © 2011-2022 走看看