【问题标题】:Check if Object is Interface via Activator.CreateInstance通过 Activator.CreateInstance 检查对象是否为接口
【发布时间】:2012-05-08 06:05:34
【问题描述】:

我正在使用 Activator.CreateInstance 在运行时从 Dll 创建一个对象,

如果对象是一个接口,我会收到错误,我不想创建该接口的对象。

所以我的问题是有什么选项可以检查一个对象是否是接口而不是类?

【问题讨论】:

  • 一个对象(意思是一个对象instance)不能是一个接口,它必须是一个具体的类型(可以实现一个接口)。您实际上是指 type 而不是 object 吗?你能显示你调用Activator.CreateInstance时使用的代码吗?
  • 创建对象后,您可以检查它是否实现了接口。

标签: c# types interface casting activator


【解决方案1】:

你的意思是你想检查一个 type 是否是一个接口类型?如果是这样,那很容易:

if (type.IsInterface)

如果你的意思是“这个对象是实现任何接口的类型”,它仍然是可行的,但更难并且可能不太有用......

【讨论】:

    【解决方案2】:

    你可以这样做:

    Type t = obj.GetType();
    t.IsInterface()
    

    【讨论】:

      【解决方案3】:

      这会有帮助吗?

      Type t = typeof(T);
      if (t.IsInterface) {
      } else {
      }
      

      顺便说一句,您声明您不想创建一个作为接口的对象。出于原因不可能这样做;但是,您可以实例化类并定义实现接口的结构。

      var obj = new MyClass();  // OK
      var s = new MyStruct();  // OK
      var i = new IMyInterface(); // NOT POSSIBLE!
      

      接口没有实现。它们是类和结构在假装实现接口时必须履行的契约。

      【讨论】:

        【解决方案4】:

        由于我不想单独回复每个答案,因此您应该使用 type.IsAbstract 而不是 type.IsInterface,因为您也不想在抽象类上触发激活器(并且 .IsAbstract 涵盖接口也)。您可能还没有遇到过这个问题,但这肯定是一个潜在的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-11
          • 2015-11-03
          • 2012-03-06
          • 1970-01-01
          • 1970-01-01
          • 2021-10-29
          相关资源
          最近更新 更多