我在StackOverflow站点之一中看到以下代码。但它没有详细解释,我无法理解。有人会解释这个吗?
public class MyArray<T>
{
T[] array = new T[10];
public T GetItem(int index)
{
return array[index];
}
}
答案 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;
}
您可以使用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.
}