Грубо говоря, я лично считаю, что написание классов, производных от базового класса, предлагает аналогичную функциональность, которую вы описываете как «наличие личных данных на экземпляр». Вместо этого у вас просто есть новое определение класса для каждого «уникального» типа.

(и многих других языках) совершенно законно обращаться к закрытым полям других экземпляров того же типа. Например:

public class Foo
{
    private bool aBool;

    public void DoBar(Foo anotherFoo)
    {
        if (anotherFoo.aBool) ...
    }
}

КакСпецификация C # (разделы 3.5.1, 3.5.2) заявляет, что доступ к закрытым полям имеет тип, а не экземпляр. Я обсуждал это с коллегой, и мы пытаемся найти причину, по которой это работает так (а не ограничивать доступ к одному и тому же экземпляру).

Лучший аргумент, который мы могли бы выдвинуть, - это проверки на равенство, когда класс может захотеть получить доступ к закрытым полям, чтобы определить равенство с другим экземпляром. Есть ли другие причины? Или какая-то золотая причина, которая абсолютно означает, что она должна работать таким образом, или что-то совершенно невозможное?

Ответы на вопрос(2)

Ваш ответ на вопрос