Приватный член класса, наследующийся каждым объектом-потомком - C#
Формулировка задачи:
Допустим, я хочу написать класс, каждый экземпляр которого создается на базе родительского объекта. Например, в родительском объекте есть число, конструктор принимает родительский объект и число, на которое нужно увеличить. Получается своеобразный сумматор. Можно ли как-то сделать так, чтобы внутри каждого экземпляра было доступно оригинальное число, не делая соответствующее поле публичным? Хотелось бы написать в методе Original() просто return a;
using System;
class Summator
{
private Summator parent = null;
private readonly int a;
private readonly int b;
public Summator(int a)
{
this.a = a;
}
public Summator(Summator parent, int b)
{
this.parent = parent;
this.b = b;
}
public int Sum()
{
return parent == null ? a : b + parent.Sum();
}
public int Original()
{
return parent == null ? a : parent.Original();
}
}
class Program
{
public static void Main()
{
Summator five = new Summator(5);
Summator seven = new Summator(five, 2);
Summator ten = new Summator(seven, 3);
Console.WriteLine(ten.Sum());
Console.WriteLine(ten.Original());
}
}Решение задачи: «Приватный член класса, наследующийся каждым объектом-потомком»
textual
Листинг программы
using System;
class Summator
{
private Summator parent = null;
protected readonly int a;
private readonly int b;
public Summator(int a)
{
this.a = a;
}
public Summator(Summator parent, int b)
{
this.parent = parent;
this.a = parent.a;
this.b = b;
}
public int Sum()
{
return parent == null ? a : b + parent.Sum();
}
public int Original()
{
return a;
}
}
class Program
{
public static void Main()
{
Summator five = new Summator(5);
Summator seven = new Summator(five, 2);
Summator ten = new Summator(seven, 3);
Console.WriteLine(ten.Sum());
Console.WriteLine(ten.Original());
// Console.WriteLine(ten.a);
}
}