سؤال

لدي زوج عقد بيانات الطلب والاستجابة التالي لاستدعاء طريقة خدمة الويب

  <xs:element name="GetUserOptionsRequest">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="OptionType" type="entities:UserOption" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="GetUserOptionsResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Options" type="entities:UserOption" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

المشكلة هي أن ما أريد أن يكون هو وسيلة للقول (بسيودوكود)

GetUserResponse response = GetuserOptions(new GetUserOptionsRequest(Type T))

وللحصول على استجابة تحتوي على إليست اعتمادا على نوع أنا تمر من خلال.

مع عقد البيانات أعلاه شسد ، فإنه يتوقع مثيل فئة في كائن الطلب ، عندما أريد فقط لتحديد تعريف نوع.

حقا أفترض ما أريد ذلك

GetUserResponse<T> response = GetUserOptions(new GetUserOptionsRequest<T>());

ولكن أنا لست متأكدا من كيفية تحديد فئات/طرق عامة في شسد.يمكن لأي شخص أن يشير لي في مقال جيد أو شرح كيف يمكنني تحديد هذا في شسد?

أنا باستخدام وسف الأزرق لتوليد رمز أيضا.

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

المحلول

لسوء الحظ ، انها غير ممكن لتحديد أنواع مع الأدوية المفتوحة في شسد.

في الواقع ، شسد ليس لديها طريقة أصلية لتمثيل الحجج نوع عام على الإطلاق.ومع ذلك ، إذا كنت ستولد صافي أنواع من مخطط شسد ، يمكنك تقليد مغلق الحجج العامة عن طريق تزيين نوع مع <xsd:annotation> تحتوي على <xsd:appinfo> العنصر:

<xs:element name="Foo">
    <xs:complexType>
        <xs:sequence>
            ...
        </xs:sequence>
        <xs:annotation>
            <xs:appinfo>
                <GenericType Name="FooOf{0}{#}"
                             Namespace="...">
                    <GenericParameter Name="string"
                                      Namespace="http://www.w3.org/2001/XMLSchema" />
                </GenericType>
            </xs:appinfo>
        </xs:annotation>
    </xs:complexType> 
</xs:element>

سيتم تمثيل هذا المخطط شسد في نظام نوع صافي كفئة من نوع Foo<string>.لاحظ أنه في هذا المثال يتم تحديد الوسيطة العامة على النحو التالي string, ، ولكن لا شيء يمنعك من إعادة استخدام نفس تعريف عنصر شسد في عقود متعددة مع الحجج العامة المختلفة.

أيضا ، لاحظ أن GenericType العنصر هو لا جزء من معيار شسد وسيتم تفسيرها فقط من قبل أداة توليد رمز صافي.

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