لا يمكن الوصول إلى العقارات العامة في الفئة المشتقة

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

سؤال

انا لدي abstract class الذي ورثه فئة أخرى على النحو التالي:

public abstract class Employee
{
        public string name{ get; set; }
        public string age { get; set; }
}

public class OtherEmployee : Employee
    {
        public OtherEmployee()
        {
        }

        public string specialField{ get; set; }
    }

هذا ما أفعله وبطريقة ما ، لا ينجزه:

Employee otherEmployee= new OtherEmployee();
otherEmployee.specialField = "somevalue";

أنا غير مزود بالوصول إلى specialField, ، في حين أن جميع سمات Employee يمكن الوصول إليها. أعلم أنها مشكلة تافهة ، لكنني ضربت حاجزًا هنا ..

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

المحلول

Employee لا يعرف specialField, ، فقط OtherEmployee يفعل. تحتاج إلى إلقاءها على الفصل الصحيح للاستخدام specialField.

Employee otherEmployee = new OtherEmployee();

هذا لا يعطيك OtherEmployee لكن Employee. لتكون قادرا على الاستخدام specialField افعل شيئًا كهذا:

(otherEmployee as OtherEmployee).specialField = yourValue;

نصائح أخرى

لن تتمكن من الوصول إلى specialField لأنه يتم إنشاء الكائن مع مرجع الفئة الأساسية. لن يتمتع بالوصول إلى خصائص فئة الطفل.

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

عليك أن تكتب بهذه الطريقة متغير موظف آخر كنوع من الموظف ، لذلك لا يعرف عن الحقل الخاص. لذا:

(otherEmployee as OtherEmployee).specialField = "somevalue";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top