tengo una lista de objetos implementando una interfaz, y una lista de esa interfaz:miembro interno de una interfaz de
public interface IAM
{
int ID { get; set; }
void Save();
}
public class concreteIAM : IAM
{
public int ID { get; set; }
internal void Save(){
//save the object
}
//other staff for this particular class
}
public class MyList : List<IAM>
{
public void Save()
{
foreach (IAM iam in this)
{
iam.Save();
}
}
//other staff for this particular class
}
El código anterior no se compila porque el compilador requiere que todos los elementos de interfaz que ser público .
internal void Save(){
pero no desea permitir que el de fuera de mi DLL para guardar el ConcreteIAM
, sólo sea salvo por el MyList
.
¿Alguna forma de hacerlo?
Actualización # 1: Hola a todos, gracias por las respuestas hasta el momento, pero ninguno de ellos es exactamente lo que necesito:
La interfaz tiene que ser público, ya que es la firma del cliente desde fuera del dll usará, junto con ID
y otras propiedades que no me molesté en escribir en el ejemplo para mantenerlo simple.
Andrew, no creo que la solución sea crear una fábrica para crear otro objeto que contenga los IAM
miembros + Guardar. Todavía estoy pensando ... ¿Alguna otra idea?
Si desea mantener el método Save en la clase concreteAM su mejor opción es probablemente ir con una clase base abstracta con un método interno abstracto Guardar como sugiere Nathan W. –
gracias por las respuestas hasta ahora, pero ninguna de ellos son exactamente lo que necesito: la interfaz debe ser pública porque es la firma que utilizará el cliente que no pertenece al dll, junto con la identificación y otras propiedades que no me molesté en escribir en el ejemplo para mantenerlo simple. Andrew, No creo que la solución sea crear una fábrica para crear otro objeto que contenga los miembros de IAM + Guardar. Todavía estoy pensando ... ¿Alguna otra idea? –
mejor tarde que nunca, pero esto puede ayudar: http://stackoverflow.com/a/18944374/492 –