Приватный член класса, наследующийся каждым объектом-потомком - 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);
    }
}

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы