检查对象是否是接口的实例

时间:2014-08-16 07:08:22

标签: c# interface unity3d

我有一个名为MeleeWeapon的类,它继承自类Item和接口Usable。我有一个类型Item的数组,其中包含一些类型为MeleeWeapon的对象,我想知道如何检查它们是否可用。我尝试了以下方法,但都导致错误记录。有什么建议? (此索引处的项目是武器类型,我确定了这一点) 我已经搜索了这个答案,这是我得到这些方法的地方,所以我为重复道歉,它只是不适合我。

Debug.Log ( itemType.IsAssignableFrom(typeof(Usable))); 
Debug.Log (inv.items[inv.selectedHotbarSlot].item is Usable);

3 个答案:

答案 0 :(得分:0)

你可能正在寻找这个:

if (obj.IsInstanceOfType(Usable))

答案 1 :(得分:0)

这是我检查对象是否属于某种类型的方式。

public interface A 
{
}

public class B : MonoBehaviour, A 
{
    void Start () 
    {
        Debug.Log(this is A); // Will print True.
    }
}

在这种情况下,请记住this是脚本B的实例。

您可以在if

中写下来
if(obj is A)
// Do something.

答案 2 :(得分:0)

您似乎向后使用IsAssignableFrom(这是一个相当常见的错误)。

IsAssignableFrom将返回true,如果以下情况" work" (假设MyItemType扩展可用):

Usable usable = new Usable(); //Pretend this constructor exists
MyItemType itemType = usable;

换句话说,它正在检查MyItemType类型的对象是否可以从 Usable类型的对象分配。

看起来你想测试的是,这是否有用:

MyItemType itemType = new MyItemType();
Usable usable = itemType;

要做到这一点,请切换类型的位置:

Debug.Log(typeof(Usable).IsAssignableFrom(itemType));