5

我有一个名为NIFERepository. 它包含一个SaveObject方法,该方法不返回任何内容并对数据库执行操作。

public class NIFERepository<E>
{
    protected void SaveObject(object saveObject)
    {
        if (saveObject is E)
            this.RepositorySession.Merge(saveObject);
    }
}

1. 我希望创建一个调用此SaveObject()方法的公共扩展方法,如下所示:

    public static class NIFERepositoryExtensions
    {
        public static T Save<T, E>(this T self, E saveObject) where T : NIFERepository<E>
        {
            self.SaveObject(saveObject);
            return self;
        }
    } 

但是受保护的范围不允许我的扩展方法识别它。

有没有办法让这种形式的方法起作用?

2. 我用 2 种类型创建了我的扩展方法:TE. T是调用它的实例,并且E是 my 中定义的类型ProductRepository<Product>,例如。当我调用此方法时,未显示定义的类型。 在此处输入图像描述

我有办法让它工作吗?

4

2 回答 2

8
  1. 您不能使用扩展方法来违反封装。
    如果类不公开方法,则不能调用它(反射除外)。
    该方法(希望)protected是有原因的;你可能做错了什么。
于 2013-04-17T18:44:06.120 回答
1

受保护的方法在继承的类中可见。所以继承并创建一个调用基本受保护方法的公共方法,如

public class BaseClass
{
  protected void SomeMethod()
   {

   }
}

public class ChildClass:BaseClass
{
  public void SomeMethodPublic()
        {
          base.SomeMethod()
        }
}
于 2013-04-17T18:44:38.613 回答