¿Es posible especificar que los miembros de una clase anidada pueden ser accedidos por la clase adjunta, pero no por otras clases?¿Cómo restringir el acceso al miembro de la clase anidado a la clase adjunta?
Aquí es una ilustración del problema (por supuesto, mi código real es un poco más compleja ...):
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; }
}
// ...
}
me gustaría evitar que el código del cliente desde la creación de instancias de JournalEntry
, pero debe haber Journal
capaz de crearlos Si hago el constructor público, cualquiera puede crear instancias ... pero si lo hago de forma privada, ¡Journal
no podrá!
Tenga en cuenta que la clase JournalEntry
debe ser pública, porque quiero poder exponer las entradas existentes al código del cliente.
¡Cualquier sugerencia sería apreciada!
ACTUALIZACIÓN: Gracias a todos por sus comentarios, que finalmente fue para el IJournalEntry
interfaz pública, implementada por una clase privada JournalEntry
(a pesar del último requisito en mi pregunta ...)
Se podría hacer el constructor (objeto) JournalEntry 'interna'; esto evitaría que otras asambleas instanciaran entradas de diario, pero otras clases en el mismo ensamblado todavía pueden hacerlas; sin embargo, si usted es el autor de la asamblea, esto podría ser suficiente. –
sí, pensé en eso, pero preferiría no poder crear instancias incluso en el mismo ensamblado ... ¡gracias de todos modos! –