当使用仿制药中使用对象时,.NET TypeCast是否会打字?
-
19-09-2019 - |
题
.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++;
}