General Category > Общий раздел

Маска вместо интерфейсов и базового класса

(1/4) > >>

pygubanov:
Всем привет.
Задался таким вопросом существует ли в ООП "Маски" которые при наложении на объект возвращают, только то, что соответствует маске (методы, свойства...)?
Почему возник такой вопрос, если использовать наследование от интерфейса или абстрактного класса, то это накладывает на этапе проектирования ограничения на объекты.
Как я себе представляю действие маски. Допустим имеется два класса несвязанные между собой базовыми наследованием, применяя к ним маску мы получаем доступ к одинаково именованным методам и свойствам, которые соответствуют маске.

--- Код: ---class A
{
 public string name;
 public void  Test(){}
...
}

class B
{
 public string name;
 public void  Test(){}
....
}


--- Конец кода ---

Накладываем маску

--- Код: ---
{
A a;
B b;
Mask1 mask;
mask = new Mask1(a);
mask.Test();
string name = mask.name;

mask = new Mask1(b);
mask.Test();
string name = mask.name;

List<A> listA;
List<B> listB;
TestForALL(MaskList(listA));
TestForALL(MaskList(listB));
}

....

void TestForALL(MaskList list)
{
 for (int i=0; i<list.Count; i++)
 {
   list[i].Test();
   string name =  list[i].name;
 }
}


--- Конец кода ---

Что скажите?

kkkk:

--- Цитировать ---Допустим имеется два класса несвязанные между собой базовыми наследованием, применяя к ним маску мы получаем доступ к одинаково именованным методам и свойствам, которые соответствуют маске.
--- Конец цитаты ---
Так сделано в Go. То, что Вы называете маской, в Go называется всё-таки интерфейсом. Чтобы соответствовать интерфейсу тип должен воплощать методы интерфейса, но явной связи(наследования) не требуется. Единственная разница с Вашими масками в том, что из интерфейса доступны только методы, но этого достаточно.

valexey_u:
А если объектег не может то, что маска хочет? Что будет?

valexey_u:

--- Цитата: kkkk от Декабрь 12, 2016, 02:52:03 pm ---
--- Цитировать ---Допустим имеется два класса несвязанные между собой базовыми наследованием, применяя к ним маску мы получаем доступ к одинаково именованным методам и свойствам, которые соответствуют маске.
--- Конец цитаты ---
Так сделано в Go. То, что Вы называете маской, в Go называется всё-таки интерфейсом. Чтобы соответствовать интерфейсу тип должен воплощать методы интерфейса, но явной связи(наследования) не требуется. Единственная разница с Вашими масками в том, что из интерфейса доступны только методы, но этого достаточно.

--- Конец цитаты ---
Насколько я понимаю, тут хочется маски конструировать в рантайме. А это не интерфейсы уже. Но это всё легко достигается через рефлекшн.

pygubanov:

Насколько я понимаю, тут хочется маски конструировать в рантайме. А это не интерфейсы уже. Но это всё легко достигается через рефлекшн.
[/quote]

в С# через рефлекшн это конечно можно сделать, но преимущество будет не то.

хочется не рантайм.  А даже вот такое через приведение типов Mask m = (Mask)a;
Только всё это повлечет большую вероятность сделать ошибки, а этого надо избегать (не давать технической возможности делать ошибки)

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии