هل .NET Typecast عند استخدام كائن في المجموعة باستخدام Generics؟

StackOverflow https://stackoverflow.com/questions/1914121

سؤال

هل .NET CLR Typecast الكائنات إلى تلك المذكورة في إعلان المجموعة؟ إذا أعلنت

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

هل .NET Typecasts هذا الكائن أثناء إضافة وإعادة تستريب ؟؟؟؟؟

حسنا، أعتقد أن السؤال نفسه لم يكن مفهوما بوضوح من قبل الجميع. هل أدى بي إلى وضع. في Java، هناك أعداد، ولكن إذا قمت بتشفير الرمز، فستلاحظ أنه، فإن المحول البرمجي يضع عبو Typecast في كل مكان يستخدم كائن المجموعة. على سبيل المثال: قائمة ListStrings؛ listofstrings.add ("")؛ قيمة سلسلة = listofstrings.get (1)؛ بعد فك ضغط ملف الفصل، نرى هذه القائمة ListOfStrings؛ listofstrings.add ("")؛ STRICE VALIE = (سلسلة) ListOfStrings.get (1)؛ هنا قام المحول البرمجي بتشج عن Typecast للحصول على سلسلة.

الآن سؤالي هو ما إذا كان هو نفسه في .NET؟

هل كانت مفيدة؟

المحلول

هل تقصد هذا؟

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

القائمة هي نوع عام - إذا تعلن مثل أدناه، فستحصل على خطأ CompialiTion:

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

على أي حال - نظرا لأنها قائمة عامة، يتم كتابتها بقوة، لذلك لن تتمكن من تمرير أي شيء ليس سلسلة (إذا قمت بذلك، فستؤدي - مرة أخرى - في ماما كبيرة خطأ تجميع).

نصائح أخرى

كلا، قائمتك مكتوبة بشدة بالسلاسل هنا. هذه هي الميزة بأكملها باستخدام الأجهزة.

لا يطبقة لا.

Generic Force Type 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).

لا، لا يحتاج ذلك، حيث يتم كتابة المجموعة.

هناك حاجة إلى TypeCasting على الإطلاق. حقيقة استخدام الأجهزة تجعل قائمتك مكتوبة بشدة تلقائيا.

لا لا يفعل ذلك. على عكس جافا، يمنح 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