2013-03-16 4 views
1

мне было интересно, если возможно следующее в C#:Intercept все дочерние методы базового класса

Базовый класс:

public abstract AbstractClass { } 

И несколько дочерних классов:

public class ConcreteClass : AbstractClass 
{ 
    public int SomeMethod(){} 
} 


public class ImplClass : AbstractClass 
{ 
    public int SomeOtherMethod(){} 
} 

Is можно ли перехватить все методы из всех классов, которые (прямо или косвенно) присущи базовому классу?

Спасибо заранее

+0

Является ли это связано с АОП? Название вводит в заблуждение. – David

ответ

1

Поскольку C# поддержки АОП, что может быть возможным

Code injection throw attributes: использованияКонтактная отражение, чтобы получить его атрибуты класса и вызова нужный метод (общего пользования)

Using IOC Frameworks как Spring.Net может быть другой вариант. (Расширенные настройки, с помощью сторонней библиотеки)

ContextBound Objects approch: Вы можете Наследовать классы от MarshalByRefObject или ContextBoundObject и использования IMessageSink. (Трудный путь)

Хорошая статья сравнения approches можно найти here

0

Это возможно, и если вы будете следовать примеру из MSDN, вы его получили, см http://msdn.microsoft.com/en-us/library/sf985hc5%28v=vs.71%29.aspx

Абстрактные методы имеют следующие особенности:

Абстрактный метод неявно - виртуальный метод. Абстрактные объявления методов разрешены только в абстрактных классах. Поскольку декларация абстрактного метода не предоставляет никакой реальной реализации, нет тела метода; объявление метода просто заканчивается точкой с запятой, и после подписи нет скобок ({}).

Смежные вопросы