Преобразование объекта дочернего класса в объект базового класса - PullRequest
0 голосов
/ 03 августа 2020

У меня есть дочерний класс B, который наследуется от базового класса A.

В моем базовом классе есть функция void DoSomething(), которая изменяет объект базового класса .

Если я вызываю функцию из объекта дочернего класса, можно ли каким-либо образом гарантировать, что измененный объект будет иметь тип базового класса.

Например,

class BaseClass
{
    int prop1;
    int prop2;

     void DoSomething()
    {
        prop1=prop1*5;
    }

}

class ChildClass:BaseClass
{
    int prop3;
    
}

class Program
{
ChildClass c= new ChildClass();
c.DoSomething();
}

теперь предположим, что childclass может иметь значение prop1 только до 10. если значение больше 50, то он по-прежнему имеет тип BaseClass, но не ChildClass. Итак, есть ли способ, которым я могу гарантировать, что после вызова c .DoSomething () объект будет считаться компилятором типа BaeeClass, а не дочернего класса.

1 Ответ

0 голосов
/ 03 августа 2020

Вы можете воспользоваться помощью Модификаторов доступа для достижения ваших требований. Вы можете использовать protected.

Ниже фрагмент кода:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Child objChild = new Child();
            objChild.ModififyParent();          /// Works fine
            Parent objParent = new Parent();
            objParent.DoSomething();            /// Doesn't work due to its protection level
        }
    }
    public class Parent
    {
        private string MyName;
        protected void DoSomething() 
        {
            MyName = MyName + "modified";
        }
    }

    public class Child : Parent
    {
        public void ModififyParent() {
            base.DoSomething();
        }
    }
}
...