Доступ к переменной базового класса в производном классе
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
в качестве аргумента метода или, возможно, сделать его свойством. Здесь есть много разных подходов, но мы не знаем, что такое общая картина - что вы действительно пытаетесь сделать. Как только вы поймете, почему это не работает так, как вы ожидаете, вы можете начать думать о том, что вы действительно пытаетесь сделать.
Просто чтобы быть ясно, это не имеет никакого отношения к наследованию. Это связано с тем, что вы создаете два разных объекта. Вы бы получили тот же эффект, если бы вы просто использовали один класс, но создали два разных экземпляра этого класса.