Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将对象强制转换到它实现但不执行的接口';你不能延长吗?_C#_Class_Interface_Scripting_Casting - Fatal编程技术网

C# 如何将对象强制转换到它实现但不执行的接口';你不能延长吗?

C# 如何将对象强制转换到它实现但不执行的接口';你不能延长吗?,c#,class,interface,scripting,casting,C#,Class,Interface,Scripting,Casting,我有一个类脚本,它有几个属性,但没有方法。然后创建扩展Script的类。理想情况下,脚本可能具有方法Update(),但不会扩展接口IUpdateable(其中指定了方法“Update”)。当这个脚本被添加到一个对象中时,该对象就会意识到,虽然该对象没有扩展IUpdateable,但它仍然是它的一个实现。然后,它会将脚本添加到具有更新方法的脚本列表中,以便可以对其进行更新 我的问题集中在两件事上,我如何判断一个类是否实现了一个接口(没有扩展它),以及在具备这些知识的情况下,如何将它转换为一个可以

我有一个类
脚本
,它有几个属性,但没有方法。然后创建扩展
Script
的类。理想情况下,脚本可能具有方法
Update()
,但不会扩展接口
IUpdateable
(其中指定了方法“Update”)。当这个脚本被添加到一个对象中时,该对象就会意识到,虽然该对象没有扩展
IUpdateable
,但它仍然是它的一个实现。然后,它会将脚本添加到具有更新方法的脚本列表中,以便可以对其进行更新

我的问题集中在两件事上,我如何判断一个类是否实现了一个接口(没有扩展它),以及在具备这些知识的情况下,如何将它转换为一个可以调用
Update()
方法的对象

<> P>还有其他的选择我应该考虑吗?


谢谢

您可以使用反射进行此操作

要检查类是否实现了接口,请尝试以下方法-

typeof(IMyInterface).IsAssignableFrom(typeof(MyType))

typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))

我想你可能会从这里使用的术语中得到一些困惑的答案。只有一个接口扩展了另一个接口,“实现”一个接口确实意味着在声明中包含它,例如
class Foo:IBar
。我想你的意思是“我怎么知道一个类是否支持接口所需的所有成员,而不实际实现它?”对吗?