【问题标题】:How to make this generic如何使这个通用
【发布时间】:2018-06-22 20:05:19
【问题描述】:

我想用实例 <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);
    }
}

我希望分页构造函数接收&lt;some project Custom Class&gt; 类型的对象,如下所示

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

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

【问题讨论】:

  • 为什么都是static
  • 泛型总是属于 PartsUC 类型还是它的后代?
  • 它的后代,它们都具有分页所需的属性,例如 DataGrid ......例如,我有 PartsUC、EqupmentUC、UsersUC、RequestUC,它们都有数据网格。
  • @HúsàmShüjáàdiiñ thhoes 类是否具有所有相同的属性?还是有些不同?
  • 您可能不希望所有这些东西都是静态的。请注意,您的属性也都可以自动实现。帮您(现在和未来)自己和任何将处理您的代码的人一个忙,并坚持单一的命名约定。 _btnPrev vs _BtnNext,除了 numberOfRecsPerPage 之外的所有字段都有一个前导下划线......保持一致。以后你会感谢自己的。

标签: c# .net generics constructor wpfdatagrid


【解决方案1】:

在你的类名后面加上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

编辑 使 interfaceabstract 成为那些类契约,然后 where: &lt;your interface&gt;

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

【讨论】:

  • 感谢您的回答,但我想告诉您,我的项目中有不止一个类类似于 PartsUC Class ,这就是我想将其设为泛型的原因。
  • 做一个接口是那些类契约,然后where: &lt;your interface&gt;
  • 谢谢,我是编程新手,我读过关于 C# 接口类的内容,我想我明白了你的意思,如果有帮助,我会尝试并给你反馈。
  • 我会写一个样本给你等一下:)
  • 非常感谢你,我真的很感谢你的帮助^^OK慢慢来:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多