【问题标题】:Casting the return value of a base class as the inherited class将基类的返回值转换为继承类
【发布时间】:2014-02-28 07:23:15
【问题描述】:

我目前正在使用继承的方法。现在我有一个名为“BaseData”的基类,它被其他 4 个类继承,其中一个是 Category。

我在 BaseData 中有一个辅助方法,它当前返回 BaseData 的数据类型。我可以从继承的类中调用帮助器方法,但我向它添加了对 Category 的强制转换。现在我明白了,即使 Category 继承自 BaseData,它们也是两个完全不同的类。有没有正确的方法来做我想做的事情?还是有可能?

我的基类是这样的

public class DataBase
{
    // Accessors and stuff

    internal static DataBase BindDataToInstance(DataRow dr)
    {
        var condition = new DataBase()
        {
            ID = (string)dr["ID"],
            Title = (string)dr["Title"],
            Description = (string)dr["Description"]
        };
        return condition;
    }


}

我正在考虑调用方法

    public class Condition : BaseData
    {
       public static Condition GetCondition()
       {

        return (Condition)BindDataToInstance(ConditionDal.GetCondition(conditionId));

       }

提前致谢!

编辑:基本上,我想获取基类的一个实例并将其转换为派生类的实例

Spook Kruger 建议的代码是我目前使用的 - 每个类一个 BindDataToInstance 方法。除了返回类型之外,每个都完全相同。

【问题讨论】:

  • 能否请您澄清您的问题,例如通过发布一些代码?
  • 听起来您不需要添加演员表。您还没有真正说出您要做什么,因此无法回答是否有正确/可能的方法。
  • 分享代码,它将非常有助于我们了解您的目标。您还可以提出一个非常具体的问题,例如:“我无法让 iLoveCats 类从 iLoveDogs 继承,但我可以让它从 iHateDogs 工作”为什么会这样?或者我根本不能让猫和狗说话?等等。你的问题很难回答,因为就像我做了两只动物,一只有两条腿,另一只没有它们是如何工作的?
  • 用泛型类代替继承怎么样?
  • 我将研究通用类。感谢领导

标签: c# inheritance


【解决方案1】:

我建议您阅读多态性和继承。您尝试做的事情可能取决于您的继承结构,不幸的是,您的代码几乎没有提供有关这些类如何绑定在一起的信息。

我建议解决您的直接问题可能是使用包装器。如果 Condition 接受一个数据库作为参数并设置所有必要的值,那么可以这样做:

public static Condition GetCondition()
{

    return new Condition(BindDataToInstance(ConditionDal.GetCondition(conditionId)));

}

【讨论】:

  • 您提供的代码是我目前使用的。但是我将在每个派生类中都有相同的代码块。我将阅读多态性。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 2021-12-27
相关资源
最近更新 更多