【问题标题】:C# use template type in foreign classC# 在外部类中使用模板类型
【发布时间】:2016-05-21 15:14:03
【问题描述】:

是否可以在另一个类中使用来自特定类的模板?

例子:

class DBObject<DataType>
{
    private string _name;
    private DataType _value;

    public DBObject()
    {
        _name = String.Empty;
    }

    public DBObject(string name)
    {
        this._name = name;
    }

    public DataType GetValue
    {
        get { return _value; }
        set { _value = value; }
    }
}

DataType 是我在 DBObject 类中使用的模板

我的TestTbl 类包含DBObject&lt;DataType&gt; 元素。

class TestTbl : DBTableObjects 
{
    public DBObject<int> _id;
    DBObject<string> _name;
    DBObject<string> _address;

    TestTbl()
    {
        AddDBTableObject(_id = new DBObject<int>("id"));
    }
}

AddDBTableObject 函数将元素添加到DBTableObjects 类中的List

class DBTableObjects
{
    List<DBObject> ls;

    public DBTableObjects()
    {
        ls = new List<DBObject>();
    }

    protected void AddDBTableObject(DBObject obj)
    {
        ls.Add(obj);
    }
}

问题:List&lt;DBObject&gt; 还需要 DBObject 实例的模板类型。如何在此处使用 DBObject 类中的 DataType

【问题讨论】:

  • 为什么不使用 DBTableObjects

标签: c# class templates


【解决方案1】:

问题在List&lt;DBObject&gt; ls; 它需要是通用的:

class DBTableObjects
{
    List<DBObject<int>> ls;

    public DBTableObjects()
    {
        ls = new List<DBObject<int>>();
    }

    protected void AddDBTableObject(DBObject<int> obj)
    {
        ls.Add(obj);
    }
}

【讨论】:

  • 这就是我的想法,虽然我打算使用通用定义,例如&lt;T&gt;
  • TestTbl&lt;DataType&gt; 等价于 TestTbl&lt;T&gt;。这只是一个命名,例如使用where DataType : struct完成约束
  • DBObject&lt;DataType&gt; _name;DBObject&lt;DataType&gt; _id; 具有相同的类型还是我弄错了?因为如果是这样,那就是个问题。对于不同的变量,我需要不同的类型。
猜你喜欢
  • 2016-10-23
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多