扩展方法试图调用受保护的方法/错误的动态参数展示

Kiw*_*nax 3 c# extension-methods

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

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

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;
        }
    } 
Run Code Online (Sandbox Code Playgroud)

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

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

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

我有办法让这个工作吗?

SLa*_*aks 7

  1. 您不能使用扩展方法来违反封装.
    如果类没有公开该方法,则无法调用它(使用Reflection除外).
    该方法(希望)protected是有原因的; 你可能做错了什么.