0

.net CLRは、オブジェクトをコレクション宣言に記載されているオブジェクトに型キャストしますか?私が宣言した場合

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

.netは、追加および取得中にこのオブジェクトをタイプキャストしますか?????

さて、質問自体は誰もがはっきりと理解していなかったと思います。詳しく説明させてください。Javaにはジェネリックスがありますが、コードを逆コンパイルすると、コンパイラーはCollectionオブジェクトが使用されるすべての場所に型キャストを配置します。例:リストlistOfStrings; listOfStrings.add( ""); 文字列値=listOfStrings.get(1); クラスファイルを逆コンパイルすると、このリストlistOfStringsが表示されます。listOfStrings.add( ""); 文字列値=(String)listOfStrings.get(1); ここで、コンパイラは文字列の型キャストを解析しました。

さて、私の質問は、それが.Netでも同じかどうかということです。

4

8 に答える 8

5

いいえ、ここではリストが文字列に強く入力されています。これが、ジェネリックを使用することの全体的な利点です。

于 2009-12-16T11:37:24.193 に答える
3

いいえ、型キャストしません。

ジェネリックは、指定されたタイプのオブジェクトのみをジェネリックコレクションに追加できるようにすることで、タイプの安全性を強制します。これらはコンパイラの警告です。

この例では、整数などの別のオブジェクトを追加しようとすると、コンパイラの警告が表示されます。

于 2009-12-16T11:38:27.267 に答える
2

「リスト」のようなものはありません:)

ただし、があり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).
于 2009-12-16T11:39:05.127 に答える
2

これですか?

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

リストはジェネリック型です-以下のように宣言すると、コンパイルエラーが発生します:

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

とにかく-それは一般的なリストなので、強く型付けされているので、文字列以外のものを渡すことはできません(そうすると、コンパイルエラーの大きなママになります)。

于 2009-12-16T11:39:58.373 に答える
1

いいえ。コレクションが入力されているため、その必要はありません。

于 2009-12-16T11:37:53.663 に答える
1

型キャストはまったく必要ありません。ジェネリックスを使用するという事実により、リストは自動的に強く型付けされます。

于 2009-12-16T11:38:09.717 に答える
1

いいえ、そうではありません。Javaとは対照的に、ダイCLRは、型消去を介さずに、ジェネリックをそれ自体で異なる型として実装します。したがって、aはとList<string>は異なるタイプList<int>であり、両方のタイプは実行時に必要に応じて動的に構築されます。

于 2009-12-16T11:41:53.440 に答える
1

番号。

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++;
}
于 2009-12-16T11:46:53.450 に答える