如何正确公开DLL的功能?

时间:2018-08-27 07:29:51

标签: c# api oop dll interface

我当前正在编写一个使用一些继承的DLL文件。现在我在公开我的类时遇到了麻烦,因为所有基类也都公开了。

例如:

public Class TestBase // Base class that gets exposed
{
}
public Class TestFunctions : TestBase // The class that I want to expose gets exposed
{
}

内部或其他修饰符(如受保护的)的问题:

internal Class TestBase // Base class that won't get exposed
{
}
internal Class TestFunctions : TestBase // The class that I want to expose won't get exposed either
{
}

我想向DLL文件的用户公开TestFunctions,但是我不想公开TestBase,因为基类仅在内部使用。公开基类对于DLL的用户是多余的,因为他需要的所有内容都包含在一个函数类中。我如何实现我所需要的?我听说接口可以帮助我,但是我无法弄清楚我到底需要做什么,因为用户无法实例化实例。

1 个答案:

答案 0 :(得分:1)

您可以使用工厂方法和接口:

例如:

//your classes: internal
internal class TestBase // Base class that I dont want to expose
{

}

//note: added interface
//note2: this class is not exposed
internal class TestFunctions : TestBase, IYourTestClass // The class that I want to expose
{

}

//an interface to communicate with the outside world:
public interface IYourTestClass
{
    //bool Test();  some functions and properties
}

//and a public factory method (this is the most simple version)
public static class TestClassesFactory
{
    public static IYourTestClass GetTestClass()
    {
        return new TestFunctions();
    }
}

因此,在呼叫者的应用程序中,现在都没有公开两个类。相反,您可以使用工厂来请求一个新的工厂:

public void Main()
{
    IYourTestClass jeuh = TestClassesFactory.GetTestClass();
}