У меня есть проект, который использует Autofac для создания экземпляров объектовПочему мой унаследованный класс не скрывает мой метод базового класса?
builder.RegisterType<AbcWebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();
Это AbcWebWorkContext
подкласс WebWorkContext
:
public partial class AbcWebWorkContext : WebWorkContext
В моей AbcWebWorkContext
я хотел бы скрыть метод и свойство от родительский класс
protected new Customer GetCurrentCustomer(){ //do stuff }
new public Customer CurrentCustomer { //do studd }
Но когда кто-то звонит
_workContext.CurrentCustomer
Вызывается базовое свойство класса. Если я позвоню так
((AbcWebWorkContext) _workContext).CurrentCustomer
это работает.
Я хотел бы знать, почему я не могу скрыть родительский метод. Я не могу изменить вызываемый класс, потому что он находится в ядре NopCommerce
, который я бы не хотел менять.
Почему это не скрывает метод?
Базовый класс декларация методов:
protected Customer GetCurrentCustomer() { // do stuff }
public Customer CurrentCustomer{ // do stuff }
GetType()
вызова на выходе _workcontext
воли
{Name = "AbcWebWorkContext" FullName = "Nop.Web.Framework.AbcWebWorkContext"}
Иерархия тип IWorkContext
(интерфейс) « WebWorkContext
« AbcWebWorkContext
_workContext
объявлен как IWorkContext
и Autofac создает экземпляр как AbcWebWorkContext
(как показано выше)
Как был объявлен метод в базовом классе? – pickypg
@pickypg добавил его к вопросу – JSBach
http://stackoverflow.com/questions/1853896/is-it-possible-to-override-a-non-virtual-method – pickypg