在C#中模拟VB.Net模块

时间:2014-08-25 18:45:19

标签: c# vb.net module

我刚刚在VB.Net工作了一段时间后才开始使用C#。我有一个dll包含常用的数据库连接字符串(和一些其他数据库信息)和另一个包含常用目录路径的DLL。在VB中创建应用程序时,我会在模块中使用这些dll来设置环境以进行测试,因此数据库将指向数据库的QA版本,并且目录将指向我的本地目录。当我准备发布应用程序时,我会将环境设置为生产环境。它看起来像这样。

Module MyModule
  Friend MyBizDBs As BizDBs
  Friend MyBizPaths As BizPaths
  Friend TodaysDate As Date

  Friend Sub InitializeModule()
    MyBizDBs = New BizDBs(DBReference.BizDatabases.DBConfig.DB_Environment.QA)
    MyBizPaths = New BizPaths(BizPaths.PathEnvironment.Test)
    TodaysDate = DBReference.BizDatabases.DBMethods.GetTodaysDate
  End Sub
End Module

然后我可以在应用程序的开头调用InitializeModule,每当一个类需要连接字符串或目录或这些dll提供的任何其他东西时,它就会指向正确的环境。而且,我不需要每次都创建一个新的MyModule实例。相反,我只能写:

Using sw as new StreamWriter(MyBizPaths.ReconciliationReport)

我知道C#没有模块。我知道静态类是相似的,但我无法初始化对象(MyBizDBs和MyBizPaths)以将它们设置为静态类中的适当环境。我正在查看C#Singleton,但每次调用类时都会重新初始化。有没有更好的方法来实现我在C#中尝试做的事情? 谢谢!

编辑:这是单身人士在C#中的样子。

public sealed class MySingleton
{
    private static readonly MySingleton instance = new MySingleton();

    private MySingleton() { }

    public static MySingleton Instance
    {
        get
        {
           return instance;
        }
    }

    public BizPaths MyBizPaths = new BizPaths(BizPaths.PathEnvironment.Test);
    public BizDBs MyBizDBs = new BizDBs(DBConfig.DB_Environment.QA);
    public DateTime todaysDate = DBMethods.GetTodaysDate();

}

1 个答案:

答案 0 :(得分:0)

只有一种方法可以在C#中模拟VB模块,并且使用静态类。编译完成后,VB模块 IS 是一个静态类,显然,如果你想要与VB模块相同的行为,你应该在C#中使用它。不同之处在于模块成员不必在VB中使用其类型名称进行限定,而C#静态类成员则需要进行限定。