如何在抽象类

时间:2016-02-01 22:02:37

标签: c# pagination

我正在尝试编写一个基本的抽象类,其中任何扩展它的类都将具有某种类型的List

上下文是我称之为网络服务,我收到了#34;页面"订单,每个订单都有"页面"订单行等

abstract class Pagination
{
    public int _offset { get; set; }
    public int _total { get; set; }
    public string previous { get; set; }
    public string next { get; set; }

    // Can I add something here that represents a list of items
    // that is overridden in child classes somehow?
    // public abstract List<Something?> items { get; set; }
    // The purpose is for this generic "getItemCount" function or something similar
    /*
    public int getItemCount()
    {
        return items != null ? items.Count() : 0;
    }
    */
}

class OrderHeader : Pagination
{
    public int orderId { get; set; }
    public List<OrderLine> items { get; set; }
}

class OrderLine : Pagination
{
    public string sku { get; set; }
    public int qty { get; set; }
    public List<OrderLineDetails> items { get; set; }
}

class OrderLineDetails
{
    public string serialNum { get; set; }
}

4 个答案:

答案 0 :(得分:1)

你可以用泛型

来做到这一点
public abstract class Pagination<T>
{
    public abstract List<T> Items { get; set; }
}

public class OrderHeader : Pagination<OrderLine>
{
    public override List<OrderLine> Items { get; set; }
}

public class OrderLine : Pagination<OrderLineDetails>
{
    public override List<OrderLineDetails> Items { get; set; }
}

答案 1 :(得分:1)

您可以使用泛型,例如:

abstract class Pagination<T>
{
    // Other properties
    public List<T> items { get; set; }
}

class OrderHeader : Pagination<OrderLine>
{
    // Other properties
}

class OrderLine : Pagination<OrderLineDetails>
{
    // Other properties
}

class OrderLineDetails
{
    // Other properties
}

答案 2 :(得分:1)

作为对包含重写的答案的补充,我将尝试展示略微不同的方法,这可能会拓宽视野。如果您要更改抽象类实现,除非需要get;set;的显式实现,否则甚至不需要覆盖您的集合,因为您通过继承本身指定泛型

abstract class Pagination<T>
{
    public virtual List<T> Items { get; set; }
}

class Tester : Pagination<string>
{
    public void Test()
    {
        foreach (string item in this.Items)
        {
            // you have declared List<string> from Pagination<T>
        }
    }
}

此外,这可能对您有用:Generic Type in constructor 通过这种方法,您最终会得到一个基类,它将为您提供通用列表

abstract class Pagination2<T>
{
    public string Property1 { get; set; }
    public List<T> Items { get; set; }

    public static Pagination2<T> GetInstance<T>()
    {
        Pagination2<T> instance = new Pagination2<T>()
        {
            Items = new List<T>()
        };
        return instance;
    } 
}

答案 3 :(得分:0)

       abstract class Pagination<T>
    {
        public int _offset { get; set; }
        public int _total { get; set; }
        public string previous { get; set; }
        public string next { get; set; }
public List<T> items { get; set; }

        public int getItemCount()
        {
            return items != null ? items.Count() : 0;
        }

    }

    class OrderHeader : Pagination<OrderLine>
    {
        public int orderId { get; set; }

    }

    class OrderLine : Pagination<OrderLineDetails>
    {
        public string sku { get; set; }
        public int qty { get; set; }

    }
相关问题