Как скрыть методы вне класса - PullRequest
3 голосов
/ 17 июня 2020

Я пытаюсь что-то сделать, но не знаю, возможно ли, что у меня есть эти классы:

public Class1
{
    private Class2 class2;

    public Class1
    {
        this.class2 = new Class2();
    }

    public Class2 Do()
    {
        return class2.Build();
    }
}

internal Class2
{
    public internal Class2 Build()
    {
        return this;
    }

    public void Fill()
    {
    }
}

var class1 = new Class1();
class1.Do().Fill();

Я хочу, когда пользователь набирает class1.Do (). доступен только метод Fill (). Как я могу это сделать?

Целью было бы предотвратить class1.Do (). Build ();

1 Ответ

4 голосов
/ 17 июня 2020

В опубликованном коде довольно много ошибок, как указано в комментарии. В качестве примера ответа я сделал все проблемные места опубликованными c. Так что пока он будет компилироваться, отнеситесь к нему с недоверием и соответствующим образом настройте модификаторы доступности.

Во-первых, я создал новый интерфейс, чтобы отображать только заливку, а не сборку:

public interface IClass2Helper
{
    void Fill();
}

Я внес пару небольших изменений в Class1 и Class2, чтобы они стали компилируемый, чтобы реализовать интерфейс в Class2 и вернуть интерфейс в методе Do() в Class1:

public class Class1
{
    private Class2 class2;

    public Class1()
    {
        this.class2 = new Class2();
    }

    public IClass2Helper Do()
    {
        return class2.Build();
    }
}

public class Class2 : IClass2Helper
{
    public Class2 Build()
    {
        return this;
    }

    public void Fill() { }
}  

И добавил простой тестовый класс / метод для проверки:

class TestProgram
{
    static void Main()
    {
        var class1 = new Class1();
        class1.Do().Fill(); //This line is OK

        //The below line will have an error since the interface doesn't expose a Build method
        class1.Do().Build(); 
    }
}  

Скрипка кода:
https://dotnetfiddle.net/5EPPfO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...