gpt4 book ai didi

c# - IsAssignableFrom、IsInstanceOf 和 BaseType 测试

转载 作者:太空狗 更新时间:2023-10-30 01:27:48 25 4
gpt4 key购买 nike

这只是我正在尝试实现的一种服务定位器类型的模式,我想在其中捕获将实现注册到它不属于的接口(interface)的尝试,如:

public void Add(Type interfaceType, object implementingObject)
{
// ... check for nulls

// NO GOOD
if(!implementingObject.GetType().IsAssignableFrom(interfaceType)...

// NO GOOD
if(!implementingObject.GetType().IsInstanceOf(interfaceType)...

// FINALLY!
if(!implementingObject.GetType().BaseType.IsAssignableFrom(interfaceType)...

// ... ok, add it
}

现在我终于通过查看 NUnit 的 isInstanceOf 断言内部找到了使用 BaseType.IsInstanceOf 的方法,但它看起来仍然是单一的。

有人可以解释为什么这是有道理的吗?有没有更简单的方法来做到这一点?

最佳答案

查看它的方式是从左到右,就像您通常在用语言进行作业时一样。

因此,在 C# 中,调用 assigningTo.IsAssignableFrom(assigningFrom)(或您提到的任何其他方法)的等效方法是将其视为“以下代码是否有效”:

<assigningTo type> variable = <instance of assigningFrom>;

将其应用于您的代码,您要使用:

interfaceType.IsAssignableFrom(implementingObject.GetType())
interfaceType.IsAssignableFrom(implementingObject.GetType().BaseType)

您想要查看实现对象上的任何类型是否可以分配给接口(interface)类型的逻辑,或者换句话说,是否可以将实现对象分配给接口(interface)类型。

关于c# - IsAssignableFrom、IsInstanceOf 和 BaseType 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2313002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com