首页 > 解决方案 > 如何使这个通用

问题描述

我想用实例的构造函数使这个类成为泛型类,<T>这是我的类。

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 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.???);
    }
}

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

标签: c#.netgenericsconstructorwpfdatagrid

解决方案


Jsutwhere 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
    }
}

通用位置

编辑 使接口抽象 成为那些类合同,然后where: <your interface>

你的类实现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
    }
}

推荐阅读