Доступ к переменной базового класса в производном классе

class Program
{
    static void Main(string[] args)
    {
        baseClass obj = new baseClass();
        obj.intF = 5;
        obj.intS = 4;
        child obj1 = new child();
        Console.WriteLine(Convert.ToString(obj.addNo()));
        Console.WriteLine(Convert.ToString(obj1.add()));
        Console.ReadLine();
    }
}
public class baseClass
{
    public int intF = 0, intS = 0;
    public int addNo()
    {
        int intReturn = 0;
        intReturn = intF + intS;
        return intReturn;
    }
}
class child : baseClass
{
    public int add()
    {
        int intReturn = 0;
        intReturn = base.intF * base.intS;
        return intReturn;
    }
}

Я хочу получить доступ к intF и intS в дочернем классе независимо от того, что я ввожу, но я всегда получаю значения обеих переменных 0. 0 - это значение по умолчанию для обеих переменных.

Может кто-нибудь сказать мне, как я могу получить значение???

спасибо в Adv..

2 ответа

Решение

Да, Zero - это то, что вы должны получить, поскольку вы создали один экземпляр дочернего класса и не присваивали значения его унаследованным переменным,

child obj1 = new child();

скорее вы создали экземпляр другого экземпляра базового класса отдельно и присвоили значение его членам,

baseClass obj = new baseClass();

и среда выполнения, и экземпляр базового класса, и дочерний экземпляр - совершенно разные объекты, поэтому вы должны назначать дочерние значения отдельно, например

obj1.intF = 5;
obj1.intS = 4;

только тогда вы получите желаемый результат.

У вас есть два отдельных объекта - это проблема. Значения переменных базового класса в объекте, на который ссылаются obj1 0, потому что они не были установлены ни к чему другому. Там нет ничего, чтобы связать этот объект с объектом, на который ссылается obj,

Если вам нужен доступ к переменным другого объекта, вам нужно сделать этот объект доступным для того, кто пытается получить доступ к данным. Вы могли бы пройти obj в качестве аргумента метода или, возможно, сделать его свойством. Здесь есть много разных подходов, но мы не знаем, что такое общая картина - что вы действительно пытаетесь сделать. Как только вы поймете, почему это не работает так, как вы ожидаете, вы можете начать думать о том, что вы действительно пытаетесь сделать.

Просто чтобы быть ясно, это не имеет никакого отношения к наследованию. Это связано с тем, что вы создаете два разных объекта. Вы бы получили тот же эффект, если бы вы просто использовали один класс, но создали два разных экземпляра этого класса.

Другие вопросы по тегам