这个类<t>有什么用?

时间:2016-11-28 02:13:50

标签: c#

我在StackOverflow站点之一中看到以下代码。但它没有详细解释,我无法理解。有人会解释这个吗?

public class MyArray<T>
{
    T[] array = new T[10];
    public T GetItem(int index)
    {
        return array[index];
    }
}
  1. 我想知道这是否是一个班级。
  2. 如何实例化这个类?
  3. 如何在班级中使用T数组?
  4. 是否需要在类外部或内部创建数组?

5 个答案:

答案 0 :(得分:3)

Generic classes <T>有类型参数。可以用单个泛型类替换每个具有不同字段类型的单独类。泛型类引入了一个类型参数。这成为类定义本身的一部分。它允许您定义类型安全的数据结构,而无需提交实际的数据类型。泛型的最常见用法是创建集合类。这样可以显着提高性能并提高质量代码,因为您可以重用数据处理算法而无需复制特定于类型的代码。

字母T表示仅根据呼叫位置已知的类型。该程序可以对T的实例起作用,就像它是一个真实的类型,但它不是。

  

我想知道这是否是一个班级。

是的,这是一个班级

  

如何实例化这个类?

MyArray<int> = new MyArray<int>();

MyArray<string> = new MyArray<string>();

或者你喜欢的任何其他类型

  

如何在班级中使用T数组?

因为我们知道泛型的一个常见用途是创建集合类。所以你也可以这样使用它。

  

是否需要在类外部或内部创建数组?

问题是模糊的bcoz,你在谈论宣告类或实现类。但假设您正在讨论实现或创建Class对象的类。它应该像普通对象启动器一样在类中。

答案 1 :(得分:2)

1:是的,它是一堂课;因此使用class关键字。

2:var myArray = new MyArray<Something>();其中Something可以是任何类型(可能有奇怪的例外)。

3:在课堂上,请参阅array。但是,由于你不知道它们是什么类型,你不可能对这些物品本身做很多事情。

4:您发布的代码在类中创建了数组。该数组是隐藏的,唯一的访问是通过GetItem方法。但是,您发布的内容必须是不完整的,因为这样做不会有用,也行不通。你需要做的不仅仅是尝试获得一件物品。

答案 2 :(得分:1)

这是generic class。这意味着<T>在实例化时将成为一种类型。例如,根据您的代码示例,您可以将其实例化为:

MyArray<int> integerArray = new MyArray<int>();

这将实例化一个强类型的整数数组。它通过在整个班级中传递T来实现这一点。通过执行以下操作,可以使用相同的类来存储字符串。

MyArray<string> stringArray = new MyArray<string>();

这样做的原因是允许容器类在它们可以包含的类型方面更加灵活。这使它们更具可重用性。在泛型之前,如果你想要一个动态列表,你需要使用ArrayList将所有内容强制转换为Object,然后要求你手动将其重新转换回原来的类型。

有很多内置的通用类,例如List<T>Dictionary<TKey, TValue>等。可以在System.Generics模块中找到它们。

答案 3 :(得分:1)

  • 我想知道这是否是一个班级。
  

是的,这是一个类,被称为Generic Classes,一个通用   类封装了特定于特定的操作   数据类型。泛型类的最常见用途是使用集合   像链表,哈希表,堆栈,队列,树等。   添加和删​​除集合中的项目等操作   无论数据类型如何,都以基本相同的方式执行   存储。

  • 如何实例化此类?

    MyArray<int> myArrayInstance= new MyArray<int>();
    
  • 如何在班级中使用T数组?

您可以使用变量array的名称在类中使用它们。并使用引用从类外部访问它。

  • 是否需要在类外部或内部创建数组

您可以在类中填充数组,也可以从MyArray构造函数填充它。如下:

public MyArray(T[] inputArrayElements)
{
   array = inputArrayElements;
}
  • 附加说明,如何使用GetItem

您可以使用myArrayInstance,类的实例来调用该方法。呼叫将如下所示:

int itemAtIndexs = myArrayInstance.GetItem<int>(5);
// which will give you the item @ 5th index

答案 4 :(得分:0)

我更愿意根据其他人的指导发布一个答案,希望能像C我低级的人一样对我这些有用的人学习新东西。

namespace GenericArray
{
    public class MyArray<T>
    {
        T[] array = new T[5];
        public MyArray(int size)
        { //Not used in this programme, because the no. of elements is already set above.
        }
        public void SetItem(int index, T value)
        {
            array[0] = value;
        }
        public T GetItem(int index)
        {
            return array[index];
        }
    }
}

在按钮事件中,我这样编码。

private void button4_Click(object sender, EventArgs e)
{
    MyArray<int> myInt = new MyArray<int>(5); //Initializing the generic class.
    myInt.SetItem(0, 1); //array element 0 is going to be assigned a value of 1.
    MessageBox.Show(myInt.GetItem(0).ToString());
    //You can also use the same class, to set string values.
}