كيف يمكنني تنبعث نوع .NET مع خصائص مثالية فقط في نوع الإرجاع فقط؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

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

شيء من هذا القبيل:

public TypeA Prop { get; }
public TypeB Prop { get; }

أفهم أنني لا أستطيع أن أستهلك هذه الخاصية من C # أو vb.net أو الكثير من لغات .Net الأخرى.

لمنع الإجابات التي تشرح لي لماذا لا أريد القيام بذلك، اسمحوا لي أن أشرح لماذا أحتاجها: أحتاجها لإعادة إنتاج خطأ.

وبشكل أكثر تحديدا، لدي خطأ في التنس الذاتي اين ا موك من النوع سوف يسبب ذلك لرمي استثناء في حالات معينة. المشكلة هي أن النوع المنبعث من قبل موك يحتوي على خصائص اسم المسمى "وهمية" تختلف فقط في نوع الإرجاع.

أرغب في إعادة إنشاء هذا السيناريو في اختبار الوحدة، لكنني أفضل عدم التبعية على موك فقط لهذا السبب الوحيد، لذلك أود إعادة إنتاج السلوك داخليا في مجموعة الاختبار.

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

المحلول

يمكنك الحصول على 2 خصائص بنفس الاسم الذي يختلف فقط بالنوع، ويمكنك القيام بذلك دون أن ينبعث من النوع:

class Foo
{
    public string X
    {
        get { return "Hello world"; }
    }
}

class Bar : Foo
{
    public new int X
    {
        get { return 42; }
    }
}

void Main()
{
    foreach(PropertyInfo prop in typeof(Bar).GetProperties())
    {
        Console.WriteLine("{0} : {1}", prop.Name, prop.PropertyType);
    }
}

سيكون إخراج هذا الرمز:

x: system.int32.
X: SYSTEM.STRING.

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