سؤال

هذه دراسة المشروع.لدي ثلاث فئات قاعدة A,B,C.هناك مصنع الدرجة التي يحصل لها من خلال منشئ الفئة التي هو كائن إلى إنشاء.كل واحد من ثلاثة فصول[أ ، ب ، ج] وقد منشئ مع المعلمة إلى توفير قاعدة بيانات كائن اتصال.هذا الرمز أستخدم في المصنع الفئة createObject الطريقة:

Type classtyp = Type.GetType(className);

Type[] constrParam = new Type[1];
constrParam[0] = typeof(DBConnection);
ConstructorInfo constr = database.GetConstructor(constrParam);

return constr.Invoke(constrParam) as Database;

السطر الأخير أعلاه يعطي هذا الخطأ.

"كائن من النوع 'System.RuntimeType' لا يمكن تحويلها إلى النوع 'System.البيانات.المشتركة.دبكونيكشن'."

كيف 'System.RuntimeType' هنا ؟ أحاول إنشاء كائن من الفئة أ من منشئ أن يأخذ متغير من نوع دبكونيكشن.

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

public class SqlServerDB: Database
{
    string str = "";

    public SqlServerDB(DbConnection DBConn)
        : base(DBConn)
    {
        str = "SQLServer";
    }
}

ما الخطأ الذي فعلته ؟

شكرا

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

المحلول

على استدعاء الأسلوب يأخذ وجوه(s) التي تحتاج إلى تمرير إلى المنشئ.كنت تمر في نوع دبكونيكشن.ما يجب أن يمر في مثيل من دبكونيكشن.

إلى أن يكون قليلا أكثر وضوحا, إذا كنت مباشرة إنشاء واحدة من هذه الأشياء, كنت تفعل شيئا من هذا القبيل:

DbConnection connection = GetConnection(); //some method that gives you back a connection object
SqlServerDB db = new SqlServerDB(connection);

ماذا تفعل لو هو نفسه كما فعل هذا:

Type type = typeof(DbConnection);
SqlServerDB db = new SqlServerDB(type); //This is obviously wrong.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top