Czy można określić, że klasa zagnieżdżona może być dostępna dla klasy otaczającej, ale nie dla innych klas?Jak ograniczyć dostęp do zagnieżdżonego elementu klasy do otaczającej klasy?
Oto ilustracja problemu (oczywiście mój rzeczywisty kod jest nieco bardziej skomplikowana ...):
public class Journal
{
public class JournalEntry
{
public JournalEntry(object value)
{
this.Timestamp = DateTime.Now;
this.Value = value;
}
public DateTime Timestamp { get; private set; }
public object Value { get; private set; }
}
// ...
}
Chciałbym zapobiec kod klienta z tworzenia wystąpień JournalEntry
, ale musi być Journal
w stanie je stworzyć. Jeśli udostępniam konstruktor jako publiczny, każdy może tworzyć instancje ... ale jeśli zrobię to prywatnie, Journal
nie będzie mógł!
Należy pamiętać, że klasa JournalEntry
musi być publiczna, ponieważ chcę mieć możliwość wyświetlania istniejących wpisów w kodzie klienta.
Każda sugestia zostanie doceniona!
UPDATE: Dzięki wszystkim za wkład, w końcu poszedł do publicznej IJournalEntry
interfejs, realizowanego przez prywatnego JournalEntry
klasy (pomimo ostatniego wymogu moje pytanie ...)
Można dokonać JournalEntry (Object) konstruktor 'wewnętrzne'; to uniemożliwiłoby innym zespołom tworzenie instancji kroniki, ale inne klasy w tym samym zespole nadal mogą je tworzyć; jednak jeśli jesteś autorem tego zgromadzenia, może to być wystarczająco dobre. –
tak, myślałem o tym, ale wolałbym nie móc tworzyć instancji nawet w tym samym zespole ... i tak dziękuję! –