.NET CLR是否将对象打字到集合声明中提到的对象?如果我声明

List<string> lststrs= new List<string>();
lststrs.add("ssdfsf");

.NET在添加和检索时会输入此对象吗?

好吧,我认为每个人都没有清楚地理解这个问题本身。在Java中,有仿制药,但是如果您将代码编译为反编译,则会注意到编译器在使用集合对象的任何地方都放置一个类型。 for ex:list listofstrings; listofstrings.add(“”);字符串值= listofstrings.get(1);分解类文件后,我们看到此列表listofstrings; listofstrings.add(“”);字符串值=(字符串)listofstrings.get(1);在这里,编译器已将字符串的类型贴上。

现在我的问题是.net中是否相同?

有帮助吗?

解决方案

你的意思是吗?

List<string> myList = new List<string>();

列表是一种通用类型 - 如果您像下面的声明一样声明,则会遇到一个compialtion错误:

List myList = new List(); //<-- big mama of a compilation error

无论如何 - 由于它是一个通用列表,它是强烈键入的,因此您将无法传递任何不是字符串的东西(如果这样做的话,它将 - 再次 - 在 大妈妈 汇编错误)。

其他提示

不,您的列表在此处强烈键入字符串。这是使用仿制药的全部优势。

它不会打字不。

通过仅允许将指定类型的对象添加到通用集合中,仿制药类型saftey。这些是编译器警告。

在您的示例中,如果您尝试添加另一个对象,例如整数,那么您会收到编译器警告。

没有“列表”之类的东西:)

但是,有一个 List<string>. 。在这里,它不会施放您的字符串,因为它是一系列字符串。

但是,请考虑一下:

List<object> objects = new List<object>();
objects.Add("Hello SO.com");
string myString = objects.First(); //Wont compile, as objects return an object.
//You need to cast it to a string (for example, by using the as operator).

否。它不需要,因为该集合已键入。

根本不需要打字。使用仿制药的事实使您的列表被强烈键入自动。

不,不是。与Java相反,Die Clr本身将仿制药作为不同类型,而不是通过类型的擦除。所以, List<string>List<int>, ,并且两种类型在需要时在运行时动态生产。

不。

请参阅list.ADD的实现:

private T[] _items;

public void Add(T item)
{
    if (this._size == this._items.Length)
    {
        this.EnsureCapacity(this._size + 1);
    }
    this._items[this._size++] = item;
    this._version++;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top