Как получить разницу множеств как поведение с ООП - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно поведение, подобное разностному оператору теории множеств \.
Я пытаюсь получить что-то от поведения класса friend, так как у меня следующая ситуация:

    public interface IRead
    {
        List<string> GetInnerResource();
    } 
    public interface IWrite()
    { 
        bool SetInnerResource();
    }
    public interface IFull:IRead,IWrite{
        void SomeMethod();
    }


public Consumer:IFull  // IFull \ IWrite
{
   private IFull access; // IFull\IWrite 

   public List<string> GetInnerResource()=>this.access.GetInnerResource();
   public void SomeMethod()=>this.acces.SomeMethod();  // i need this 
   public bool SetInnerResource(){...}//--i do not want this here !
}
public Admin:IFull
{
   private IFull access;
   public List<string> GetInnerResource()=>this.access.GetInnerResource();
   public bool SetInnerResource()=>this.access.SetInnerResource();
   public void SomeMethod()=>this.access.SomeMethod();
}

Как видите, у меня есть 3 интерфейсы (IRead, IWrite, IFull), где третий получен из первого 2 и имеет другой метод.

У меня есть дваклассы Consumer и Admin где:

 -Consumer needs to implement IFull \ IWrite
 -Admin  needs IFull

Поскольку оба моих конкретных класса делегируют реализации внутреннему полю, проблема заключается во внутреннем поле для класса Consumer, так как ему требуется somethingкоторый реализует IFull\IWrite

Обычно в C++ я бы решил это с классом friend, который имеет полный доступ к классу, используя Read для всех остальных. Здесь я не могусделать это.

Какие у меня есть альтернативы?
Мне нужен интерфейс ISomething: {IFull\IWrite} для Consumer класса

PS IFull\IWrite=IRead + [methods defined only in IFull]

1 Ответ

1 голос
/ 17 апреля 2019

Быстрое и простое решение состоит в том, чтобы отделить иерархию от интерфейса IFull и иметь 3 отдельных интерфейса, которые могут быть получены в соответствии с потребностями использования для классов Consumer или Admin

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