Как правильно выставить функции DLL? - PullRequest
0 голосов
/ 27 августа 2018

В настоящее время я пишу файл 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
{
}

Я хочу предоставить TestFunctions пользователю файла DLL, но я не хочу предоставлять TestBase, поскольку базовый класс используется только для внутреннего использования.Предоставление базового класса является избыточным для пользователя DLL, поскольку все, что ему нужно, содержится внутри одного класса функций.Как мне добиться того, что мне нужно?Я слышал, что интерфейсы могут помочь мне, но я не могу понять, что именно мне нужно сделать, так как пользователь не может создать экземпляр.

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете использовать фабричный метод и интерфейс:

Например:

//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();
}
...