هل من الممكن في C # الزائد عامل يلقي عام بالطريقة التالية؟

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

سؤال

وأتساءل فقط إذا كان هناك أي حال لتمثيل التعليمة البرمجية التالية في C # 3.5:

public struct Foo<T> {

    public Foo(T item) {
        this.Item = item;
    }

    public T Item { get; set; }

    public static explicit operator Foo<U> ( Foo<T> a )
        where U : T {

        return new Foo<U>((U)a.Item)
    }
}

والشكر

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

المحلول

وشركات التحويل لا يمكن أن يكون عام. من قسم المواصفات 10.10، وهنا شكل تحويل مشغل-إعالن:

<اقتباس فقرة>
conversion-operator-declarator:
    implicit   operator   type   (   type   identifier   )
    explicit   operator   type   (   type   identifier   )

وقارن هذا مع، ويقول، طريقة الرأس:

<اقتباس فقرة>   

<ط> طريقة الرأس :   <ط> سمات <الفرعية> التقيد طريقة معدلات <الفرعية> التقيد جزئية <ط> <الفرعية> التقيد <ط> عودة من نوع   <ط> الأعضاء اسم نوع معلمة قائمة <الفرعية> التقيد (<ط> رسمية المعلمة القائمة <الفرعية> التقيد )   <ط> نوع معلمة القيود على بنود <الفرعية> التقيد

و(عذرا عن التنسيق - ولست متأكدا كيف نفعل ذلك أفضل)

لاحظ أن شكل المشغل لا يتضمن القائمة نوع معلمة أو قيود معلمة نوع.

نصائح أخرى

والتعليمات البرمجية يغلي وصولا الى خط: return new Foo<U>((U)a.Item)

وأين كنت في محاولة لتعيين baseclass إلى فئة موروثة، وهو أمر مستحيل.

ودعونا نقول T (الفئة الأساسية) هو من نوع Stream وU من نوع MemoryStream (فئة موروثة)، لا يمكنك تعيين Stream إلى متغير من نوع MemoryStream.

وأعتقد أن الإجابة المختصرة هي "ليست ممكنة. حاول استخدام أسلوب بدلا من ذلك"

ويبدو أيضا أن يكون مغفل في هذه المسألة عن القيد مشغل طاقتها في الوراثة. NET

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top