繁体   English   中英

引用基类中的派生对象

[英]Referencing derived object in a base class

我有一个使用泛型和反射的数据映射助手类。

由于我在我的帮助器类中使用了反射和泛型,因此标准CRUD操作的代码在我的所有业务对象中都是相同的(如基类Create()方法中所示),因此我尝试使用基础BusinessObject用于处理重复方法的类。

我希望基类能够调用我的通用DataUtils方法,例如,接受对派生的业务对象对象的引用以填充SQL参数。

DataUtils.CreateParams需要一个类型为T的对象和一个bool(表示插入或更新)。

我想传递“this”,表示我的派生对象是基类,但是我得到编译错误“最好的重载匹配包含无效参数”。

如果我在派生类中实现Create(),并将基类的Create方法传递给“this”,它就可以工作 - 但是我仍然在每个业务对象类中实现所有CRUD方法。 我希望基类处理这些。

基类是否可以调用方法并将引用传递给派生对象?

这是我的基类:

public abstract class BusinessObject<T> where T:new()
{
    public BusinessObject()
    { }

    public Int64 Create()
    {
        DataUtils<T> dataUtils = new DataUtils<T>();
        string insertSql = dataUtils.GenerateInsertStatement();
        using (SqlConnection conn = dataUtils.SqlConnection)
        using (SqlCommand command = new SqlCommand(insertSql, conn))
        {
            conn.Open();

            //this line is the problem
            command.Parameters.AddRange(dataUtils.CreateParams(obj, true));
            return (Int64)command.ExecuteScalar();

        }
    }
}

}

派生类:

 public class Activity: BusinessObject<Activity>
 {
    [DataFieldAttribute(IsIndentity=true, SqlDataType = SqlDbType.BigInt)]
    public Int64 ActivityId{ get; set; }
    ///...other mapped fields removed for  brevity

    public Activity()
    {
        ActivityId=0;
    }

    //I don't want to have to do this...
    public Int64 Create()
    {

        return base.Create(this);
    }

this投到T

dataUtils.CreateParams((T)this, true);

如果您创建一个public class Evil : BusinessObject<Good> ,则会抛出InvalidCastException。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM