Search code examples
c#.netgenericsconstructorwpfdatagrid

How to make this generic


I want to make this class generic class with a constructor of instance <T>this is my 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);
    }
}

I want the Pagenation Constructor to Receive an object of Type <some project Custom Class> like the following

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

I made the generic class like 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.???);
    }
}

I dont know how to reassign the pagenation Class properties to the properties of the received <PartsUC> instance object


Solution

  • Jsut add where T : PartsUC after you class name, that will constrain your generic type.

    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

    EDIT Make an interface or abstract be those class contract, then where: <your interface>

    Your class Implements IUC interface, then Encapsulation their own property.

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