C# 如何使其通用

C# 如何使其通用,c#,.net,generics,constructor,wpfdatagrid,C#,.net,Generics,Constructor,Wpfdatagrid,我想用实例的构造函数使这个类成为泛型类,这是我的类 class Pagenation { public TextBlock PageInformation { get; set; } public DataTable dt { get; set; } public ComboBox NumberOfRecords { get; set; } public DataGrid DatagridObject { get; set; }

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

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);
    }
}
类分页
{
公共文本块页面信息{get;set;}
公共数据表dt{get;set;}
公共组合框NumberOfRecords{get;set;}
公共DataGrid DatagridObject{get;set;}
公共按钮BtnPrev{get;set;}
公共按钮BtnFirst{get;set;}
公共按钮BtnNext{get;set;}
公共按钮BtnLast{get;set;}
public int NumberOfRecPerPage{get;set;}
私有int-pageIndex=1;
私人int numberOfRecPerPage;
公共分页(DataGrid UCDatagrid,组合框编号OfRecords组合框,int
numOfRecPerPage、TextBlock PageInfo、数据表数据、,
按钮上一个、按钮第一个、按钮下一个、按钮最后一个)
{
NumberOfRecordsComboBox.Items.AddRange(新列表{“5”、“10”、“15”、“20”});
(NumberOfRecords、numberOfRecPerPage、DatagridObject)=
(NumberOfRecordsComboBox,numOfRecPerPage,UCDatagrid);
dt=Data.Copy();
PageInfo=PageInfo;
(BtnPrev、BtnFirst、BtnNext、BtnLast)=(上一个、第一个、下一个、最后一个);
}
}
我希望分页构造函数接收类型为
的对象,如下所示

Pagenation PG = new Pagenation<PartsUC>(this);
Pagenation PG=新的寻呼(本);
我创建了这样的泛型类

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.???);
    }
}
类分页
{
公共寻呼(T类OBJ)
{
NumberOfRecords=ClassObj.???;//要分配ClassObj的属性吗
numberOfRecPerPage=ClassObj。???;
DatagridObject=ClassObj。???;
dt=类别OBJ。???;
PageInformation=ClassObj。???;
(BtnPrev、BtnFirst、BtnNext、BtnLast)=
(ClassObj.??,ClassObj.??,ClassObj.??,ClassObj.??);
}
}

我不知道如何将pagenation类属性重新分配给所接收的
实例对象的属性,但在类名之后添加
,其中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
    }
}

为什么所有的东西都是静态的?泛型总是PartsUC类型还是它的后代?作为它的后代,它们都有必要的分页属性,比如DataGrid,。。。。例如,我有PartsUC、equipmentuc、UsersUC、RequestUC,它们都有数据网格。@HúsámShüjádia diiñthoes类都有相同的属性吗?或者有些是不同的?你可能不希望所有这些东西都是静态的。请注意,您的所有属性也可以自动实现。请帮你(现在和将来)自己和任何将编写你的代码的人一个忙,并坚持单一的命名约定_btnPrev vs_Btnext,除numberOfRecsPerPage外的所有字段都有一个前导下划线…请保持一致。稍后你会感谢你自己。谢谢你的回答,但我想告诉你,我的项目中有不止一个类类似于
PartsUC
类,这就是为什么我想把它变成一个泛型。让接口成为那些类的契约,然后
其中:
谢谢,我是编程新手,我读过关于C#接口类的书,我想我明白你的意思了,如果有帮助,我会尝试一下并给你反馈。我会给你写一个样本等一下:)非常感谢你,我真的很感谢你的帮助^^好的,慢慢来:)
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
    }
}