доступ к переменной базового класса в производном классе - PullRequest
4 голосов
/ 14 марта 2011
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 - это значение по умолчанию для обеих переменных.

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

Спасибо за объявление.

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

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

child obj1 = new child();

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

baseClass obj = new baseClass();

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

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

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

2 голосов
/ 14 марта 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...