如何使这个通用

How to make this generic

我想使这个 class 具有实例构造函数的通用 class <T>这是我的 Class。

class Pagenation
{
    public TextBlock PageInformation { get; set; }
    public DataTable dt              { get; set; }
    public ComboBox NumberOfRecords  { get; set; }
    public DataGrid DatagridObject   { get; set; }
    public Button BtnPrev            { get; set; }
    public Button BtnFirst           { get; set; }
    public Button BtnNext            { get; set; }
    public Button BtnLast            { get; set; }
    public int NumberOfRecPerPage    { get; set; }

    private int pageIndex = 1;
    private int numberOfRecPerPage;

    public Pagenation(DataGrid UCDatagrid, ComboBox NumberOfRecordsComboBox, int 
                      numOfRecPerPage, TextBlock PageInfo, DataTable Data, 
                      Button Prev, Button First, Button Next, Button Last)
    {
        NumberOfRecordsComboBox.Items.AddRange(new List<string>{ "5", "10", "15", "20" });

        (NumberOfRecords, numberOfRecPerPage, DatagridObject) = 
            (NumberOfRecordsComboBox, numOfRecPerPage, UCDatagrid);

        dt = Data.Copy();

        PageInformation = PageInfo;
        (BtnPrev, BtnFirst, BtnNext, BtnLast) = (Prev, First, Next, Last);
    }
}

我希望分页构造函数接收类型为 <some project Custom Class> 的对象,如下所示

Pagenation PG = new Pagenation<PartsUC>(this);

我将通用 class 制作成这样

class Pagenation<T>
{
    public Pagenation(T ClassObj)
    {
        NumberOfRecords    = ClassObj.???;  //  want to assign the properties of the ClassObj
        numberOfRecPerPage = ClassObj.???;
        DatagridObject     = ClassObj.???;

        dt = ClassObj.???;

        PageInformation =ClassObj.???;

        (BtnPrev, BtnFirst, BtnNext, BtnLast) = 
            (ClassObj.???, ClassObj.???, ClassObj.???, ClassObj.???);
    }
}

我不知道如何将分页 Class 属性重新分配给接收到的 <PartsUC> 实例对象的属性

只需在 class 名称后添加 where T : PartsUC,这将限制您的通用类型。

class Pagenation<T> where T : PartsUC
{

    public Pagenation(T ClassObj)
    {

        this.NumberOfRecords = ClassObj.NumberOfRecords;
        this.numberOfRecPerPage = ClassObj.numberOfRecPerPage;
        this.DatagridObject = ClassObj.???????;
        //... set your property from PartsUC class
    }
}

Generic where

编辑 使接口抽象成为那些class契约,然后where: <your interface>

你的class实现了IUC接口,然后封装了自己的属性.

public interface IUC{
    Button BtnPrev { get; set;}
    Button BtnFirst{ get; set;}
    Button BtnNext{ get; set;}
    Button BtnLast{ get; set;}
    DataGrid DatagridObject{ get; set;}
    //... all you need property info
}

public class PartsUC : IUC{
    Button BtnPrev { get; set;}
    Button BtnFirst{ get; set;}
    Button BtnNext{ get; set;}
    Button BtnLast{ get; set;}
    DataGrid DatagridObject{ get; set;}
    //... all you need property info
}

public class EqupmentUC : IUC{
    Button BtnPrev { get; set;}
    Button BtnFirst{ get; set;}
    Button BtnNext{ get; set;}
    Button BtnLast{ get; set;}
    DataGrid DatagridObject{ get; set;}
    //... all you need property info
}

public class UsersUC : IUC{
    Button BtnPrev { get; set;}
    Button BtnFirst{ get; set;}
    Button BtnNext{ get; set;}
    Button BtnLast{ get; set;}
    DataGrid DatagridObject{ get; set;}
    //... all you need property info
}


class Pagenation<T> where T : IUC
{

    public Pagenation(T ClassObj)
    {

        this.NumberOfRecords = ClassObj.NumberOfRecords;
        this.numberOfRecPerPage = ClassObj.numberOfRecPerPage;
        //... set your property from PartsUC class
    }
}