سؤال

حسنا، هذا هو الحال:

وحصلت على العامة من الدرجة القاعدة التي أنا بحاجة إلى تهيئة مع بعض القيم الثابتة. هذه القيم يجب أن نفعل مع هذا النوع من أنواع يتم تحميل بلدي baseclass عام مع أي شيء.

وأريد أن تكون قادرة على القيام بشيء من هذا القبيل:

GenericBaseclass.Initialize(AssociatedObject);

وحين وجود أيضا فئة تفعل مثل هذا:

public class DerivedClass : GenericBaseclass<int>
{
   ...
}

هل هناك أي طريقة لتحقيق ذلك؟ أنا يمكن أن يجعل baseclass غير عامة ووضع أسلوب ثابت هناك، ولكن أنا لا أحب أن "الإختراق":)

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

المحلول

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

ونضع في اعتبارنا أن للمتغيرات ثابتة، يمكنك الحصول على متغير ثابت مختلفة في مجموعة وسيطة نوع:

using System;

public class GenericType<TFirst, TSecond>
{
    // Never use a public mutable field normally, of course.
    public static string Foo;
}

public class Test
{    
    static void Main()
    {
        // Assign to different combination
        GenericType<string,int>.Foo = "string,int";
        GenericType<int,Guid>.Foo = "int,Guid";
        GenericType<int,int>.Foo = "int,int";
        GenericType<string,string>.Foo = "string,string";


        // Verify that they really are different variables
        Console.WriteLine(GenericType<string,int>.Foo);
        Console.WriteLine(GenericType<int,Guid>.Foo);
        Console.WriteLine(GenericType<int,int>.Foo);
        Console.WriteLine(GenericType<string,string>.Foo);

    }
}

ويبدو أنك لا تفعل <م> حقا تريد متغير ثابت مختلفة في T من الفئة الأساسية العامة الخاصة بك - لذلك لا يمكن أن يكون ذلك في لديك عامة الفئة الأساسية .

نصائح أخرى

وهذا هو بالضبط ما عليك القيام به. عندما يكون لديك معلمة نوع، كل مثيل آخر من نوع هو منفصل نوع. وهذا يؤدي إلى فصل المتغيرات ثابتة.

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

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