C# 这个类有什么用<;T>;

C# 这个类有什么用<;T>;,c#,C#,我在一个StackOverflow站点中看到了以下代码。但没有详细解释,我无法理解。有人能解释一下吗 public class MyArray<T> { T[] array = new T[10]; public T GetItem(int index) { return array[index]; } } 公共类MyArray { T[]数组=新的T[10]; 公共T GetItem(整数索引) { 返回数组[索引]; } } 我

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

public class MyArray<T>
{
    T[] array = new T[10];
    public T GetItem(int index)
    {
        return array[index];
    }
}
公共类MyArray
{
T[]数组=新的T[10];
公共T GetItem(整数索引)
{
返回数组[索引];
}
}
  • 我想知道这是不是一门课
  • 如何实例化这个类
  • 如何在类中使用T数组
  • 数组是需要在类的外部还是内部创建
  • 具有类型参数。单独的类(每个类中都有不同的字段类型)可以替换为单个泛型类。泛型类引入了一个类型参数。这将成为类定义本身的一部分。它允许您定义类型安全的数据结构,而无需提交到实际的数据类型。泛型最常见的用途是创建集合类。这将显著提高性能并提高代码质量,因为您可以重用数据处理算法,而无需复制特定类型的代码

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

    我想知道这是不是一门课

    是的,这是一门课

    如何实例化这个类

    MyArray=newmyarray();
    

    MyArray=newmyarray();
    
    或者其他你喜欢的类型

    如何在类中使用T数组

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

    数组是需要在类的外部还是内部创建

    问题是您谈论的是哪个类是声明类还是实现类。但假设您谈论的是实现或创建类对象的类。它应该像普通对象启动器一样位于类内部。

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

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

    我想知道这是不是一门课

    是的,这是一门课

    如何实例化这个类

    MyArray=newmyarray();
    

    MyArray=newmyarray();
    
    或者其他你喜欢的类型

    如何在类中使用T数组

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

    数组是需要在类的外部还是内部创建

    问题是您谈论的是哪个类是声明类还是实现类。但假设您谈论的是实现或创建类对象的类。它应该像普通对象启动器一样位于类内部。

    这是一个。这意味着在实例化时,
    将是一个类型。例如,根据您的代码示例,您可以将其实例化为:

    MyArray<int> integerArray = new MyArray<int>();
    
    这样做的原因是允许容器类在其可以包含的类型方面更加灵活。这使得它们更加可重用。在泛型之前,如果需要动态列表,则需要使用
    ArrayList
    ,将所有内容转换为type
    Object
    ,然后需要手动将其向上转换回它想要的类型

    有很多内置的泛型类,例如,等等。它们可以在
    系统.Generics
    模块中找到。

    这是一个。这意味着在实例化时,
    将是一个类型。例如,根据您的代码示例,您可以将其实例化为:

    MyArray<int> integerArray = new MyArray<int>();
    
    这样做的原因是允许容器类在其可以包含的类型方面更加灵活。这使得它们更加可重用。在泛型之前,如果需要动态列表,则需要使用
    ArrayList
    ,将所有内容转换为type
    Object
    ,然后需要手动将其向上转换回它想要的类型


    有很多内置的泛型类,例如,等等。它们可以在
    系统中找到。泛型
    模块中。

    1:是的,它是一个类;因此使用了
    关键字

    2:
    var myArray=new myArray()其中
    某物
    可以是任何类型(可能有一个奇怪的例外)

    3:在类内,只需参考
    array
    。不过,由于您不知道这些物品是什么类型的,所以您无法对它们本身进行大量处理


    4:您发布的代码在类中创建数组。数组是隐藏的,只有通过
    GetItem
    方法才能访问它。不过,你发布的内容必须是不完整的,因为这样做既没用也没用。你需要做的不仅仅是试着得到一件物品。

    1:是的,这是一门课;因此使用了
    关键字

    2:
    var myArray=new myArray()其中
    某物
    可以是任何类型(可能有一个奇怪的例外)

    3:在类内,只需参考
    array
    。不过,由于您不知道这些物品是什么类型的,所以您无法对它们本身进行大量处理MyArray<int> integerArray = new MyArray<int>();
    MyArray<string> stringArray = new MyArray<string>();
    
    MyArray<int> myArrayInstance= new MyArray<int>();
    
    public MyArray(T[] inputArrayElements)
    {
       array = inputArrayElements;
    }
    
    int itemAtIndexs = myArrayInstance.GetItem<int>(5);
    // which will give you the item @ 5th index
    
    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.
    }