实现一个接口然后调用Initialize()函数

时间:2011-09-30 17:04:58

标签: c# vb.net

这不容易解释清楚但是这里......

我有一些在VB中工作正常但在C#中没有的工作。

我有2个类,每个类实现不同的接口。每个接口都公开一个Initialize()函数,该函数应该在插件加载时自动调用。因为每个类都有一个Initialize()函数,我可以看到在日志中调用这两个函数。这在VB中运行良好。

当我在C#中做同样的事情时,只调用第一个类中的Initialize()。任何人都知道为什么会发生这种情况?

vb代码:

Public Class class1
    Implements Interface1

    Public Sub Initialize() Implements Interface1.Initialize
        msgbox("initialize from class1")
    End Sub
End Class

Public Class class2
    Implements Interface2

    Public Sub Initialize() Implements Interface2.Initialize
        msgbox("initialize from class2")
    End Sub
End Class

C#代码:

public class class1 : interface1
{
    public void Initialize()
    {
        messagebox.show("initialize from class1");
    }
}

public class class2 : interface2
{
    public void Initialize()
    {
        messagebox.show("initialize from class2");
    }
}

正如您所看到的,两种语言的代码完全相同。为什么它在VB中工作而不在C#中工作?

2 个答案:

答案 0 :(得分:0)

两个类的构造函数都被调用了吗?或者只是初级化的第一类?
请尝试添加一个(静态)构造函数来检查哪些类被初始化。

一个类的静态构造函数:

public class class2 : interface2
{
    static class2(){
        messagebox.show("Static Constructor from class2");
    }

    public void Initialize()
    {
        messagebox.show("initialize from class2");
    }
}

答案 1 :(得分:0)

感谢大家的帮助!事实证明问题出在调用代码中。简而言之,每个插件都有一个命令ID作为界面的一部分。在这种情况下,两者都有ID 1000.当调用代码循环通过插件加载时,如果它看到重复的ID,它会跳过该插件。我的问题是我正在使用相同的ID同时加载其他插件。你们都帮助在调用代码中找到了一个错误(这是一个非常着名的软件),谢谢!