通过IKVM在C#中用于OIM的Java interface.class

时间:2013-10-22 20:19:59

标签: c# java oracle interface ikvm

我使用IKVM将Oracle的OIMClient库转换为dll。不想使用java,想使​​用.NET,但没有适用于.NET的OIM API。

如果有人使用过OIM,你要做的是创建OIMClient对象,然后创建一个用于查找,修改,创建用户的UserManger对象。

这是java代码(经过测试和运行):

UserManager umgr = null;
umgr = oimClient.getService(UserManager.class);

如果不知道,这是getService方法:

public virtual object getService(Java.Lang.Class serviceClass);

在.net中,我找不到使用interface.class的方法。 - C#中的UserManager对象不存在.class。 - 如果我尝试将其转换为我得到的java类,“无法从'oracle.iam.identity.usermgmt.api.UserManager'转换为'java.lang.Class'”

另一个注意事项:我想知道IKVM是否没有正确转换,或者我可能只是丢失了:)

所以,我的问题是:在C#中如何执行java命令 Interface .class?

1 个答案:

答案 0 :(得分:1)

正如HighCore在他的评论中所建议的,'typeof(UserManager)'就是你想要的。如在

umgr = (UserManager)oimClient.getService(typeof(UserManager));

任何想要Java类的方法都可以提供.NET类型。您可以通过查看java.lang.Class的元数据并注意它为SystemType提供隐式强制转换来看到这一点。

[Serializable]
[Signature("T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement;")]
public sealed class Class : Object, Serializable.__Interface, GenericDeclaration, Type, AnnotatedElement, ISerializable
{
    // <SNIP>
    public static implicit operator Class(global::System.Type type);
}