asp.net 无法调用抽象基成员

ryevplcw  于 2023-05-23  发布在  .NET
关注(0)|答案(5)|浏览(215)

我正在尝试为Spread.NET创建自定义单元格类型。我得到的错误是:
无法调用抽象基成员:'FarPoint.Web.Spread.BaseCellType.PaintCell(string,System.Web.UI.WebControls.TableCell,FarPoint. Web.Spread.Appearance,FarPoint.Web.Spread.Inset,object,bool)'
代码如下:

[Serializable()]
public class BarcodeCellType : FarPoint.Web.Spread.BaseCellType
{
    public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
    {
        parent.Attributes.Add("FpCellType", "BarcodeCellType");

        if (value != null)
        {
            try
            {
                MemoryStream ms = GenerateBarCode(value.ToString());
                var img = Bitmap.FromStream(ms);
                value = img;
            }
            catch (Exception ex)
            {
                value = ex.ToString();
            }
        }

        return base.PaintCell(id, parent, style, margin, value, upperLevel); //ERROR HERE
    }

    private MemoryStream GenerateBarCode(string codeInfo)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            BarCodeBuilder bb = new BarCodeBuilder();
            bb.CodeText = codeInfo;
            bb.SymbologyType = Symbology.Code128;
            bb.BarCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            return ms;
        }
    }
}
p4rjhz4m

p4rjhz4m1#

这是因为在抽象类“FarPoint.Web.Spread.BaseCellType”中,您可能将PaintCell方法定义为抽象的,并且抽象方法声明引入了一个新的虚方法,但不提供该方法的实现。相反,非抽象派生类(“BarcodeCellType”)需要通过重写该方法来提供它们自己的实现。因为抽象方法不提供实际的实现。

ax6ht2ek

ax6ht2ek2#

PaintCell被声明为abstract而不是virtual,因此您无法执行base.PaintCell调用。由您的代码来创建Control对象并返回它。
如果你不想创建Control,你可能想从一个比BaseCellType更派生的类继承,并覆盖派生类PaintCell方法。

cvxl0en2

cvxl0en23#

基成员是抽象的,意味着没有实现。删除对base.PaintCell的调用将允许代码 * 编译 *,但我不确定这是否会使代码 * 工作 *。

2nc8po8w

2nc8po8w4#

An abstract method doesn't come with an implementation;子类必须提供一个实现,这正是您正在做的。
忽略呼叫。

6ioyuze2

6ioyuze25#

你不能调用抽象方法。它需要在派生类中定义。

相关问题