У меня есть список объектов, реализующих интерфейс, и список этого интерфейса:
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
}
Предыдущий код не компилируется, потому что компилятор требует, чтобы все члены интерфейса были общедоступными.
internal void Save(){
Но я не хочу позволять снаружи моей DLL сохранять ConcreteIAM
, ее нужно сохранить только через MyList
.
Как это сделать?
Обновление # 1: Привет всем, спасибо за ответы до сих пор, но ни один из них не является именно тем, что мне нужно:
Интерфейс должен быть общедоступным, потому что это подпись, которую клиент извне dll будет использовать, а также ID
и другие свойства, которые я не удосужился написать в примере, чтобы это было просто.
Эндрю, я не думаю, что решение создает factory для создания другого объекта, который будет содержать членов IAM
+ Сохранить. Я все еще думаю... Любые другие идеи?