C# 如何从基类中的另一个方法调用基虚拟方法而不调用重写?

C# 如何从基类中的另一个方法调用基虚拟方法而不调用重写?,c#,virtual,C#,Virtual,C VS2010 我的基类中有两个方法。一个是虚拟的,参数列表为空;另一个是重载,它不是虚拟的,但允许传入多个参数 在某些派生类中重写空虚方法,以调用重载的基函数 重载方法foobar传递的值需要调用虚拟方法的基本版本 请问我该怎么做?为了解决这个问题,我将代码从虚方法移到了一个单独的私有方法中,这两个方法都调用它,但我想知道是否需要这样做 using KVP = KeyValuePair<string, object>; abstract class BaseRecordClas

C VS2010

我的基类中有两个方法。一个是虚拟的,参数列表为空;另一个是重载,它不是虚拟的,但允许传入多个参数

在某些派生类中重写空虚方法,以调用重载的基函数

重载方法foobar传递的值需要调用虚拟方法的基本版本

请问我该怎么做?为了解决这个问题,我将代码从虚方法移到了一个单独的私有方法中,这两个方法都调用它,但我想知道是否需要这样做

using KVP = KeyValuePair<string, object>;

abstract class BaseRecordClass
{

  private IEnumerable<KVP> BasePrep()
  {
    // Serialization can't handle DbNull.Value so change it to null
    var result = Data.Select(kvp => new KVP(kvp.Key, kvp.Value == DBNull.Value ? null : kvp.Value)).ToList();
    // Add the table name
    result.Add(new KVP(TableNameGuid, TableName));
    return result;  
  }

  /// <summary>
  /// Prepares class for sending/serializing over the web.
  /// </summary>
  /// <returns></returns>
  public virtual IEnumerable<KVP> PrepareForWebInterface()
  {
    return BasePrep();
  }

  /// <summary>
  /// Override to the above that adds extra items to 
  /// result eg lists of subrecords
  /// </summary>
  /// <param name="items"></param>
  /// <returns></returns>
  protected IEnumerable<KVP> PrepareForWebInterface(params KVP[] items)
  {
    var result = BasePrep().ToList();
    result.AddRange(items);
    return result;
  }
}// class  

class SubRecordClass
{
  public override IEnumerable<KVP> PrepareForWebInterface()
  {
    var parms = new List<KVP>
    {
      new KVP(CustomGroupsFieldListStr, _customGroupsFieldList.Select(item => item.PrepareForWebInterface()).ToList()),
      new KVP(UserGroupsListStr, _userGroupsList.Select(item => item.PrepareForWebInterface()).ToList()),
      new KVP(StaffPermissionsStr, _staffPermissions.Select(item => item.PrepareForWebInterface()).ToList())
    };
    return PrepareForWebInterface(parms.ToArray());
  }      
}

你的问题不太清楚你想要什么

听起来你想调用一个在子类中被重写的基方法,从同一个类中的继承方法调用,这个方法没有被重写,这有意义吗

如果是这样,我相信您只需要使用base.YourMethod在基类中调用该方法


不过,为了简单和清晰起见,您最好将相关逻辑保留在一个单独的方法中,就像您目前所做的那样。根据你稀疏的描述,我真的看不出有什么不对

请分享代码;它比文本更容易阅读。你肯定有一种代码的味道。这些值是什么意思?对不起,伙计们。请参阅编辑后的文章