У меня есть список объектов, реализующих интерфейс, и список этого интерфейса:
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
и другими свойствами, которые я не удосужился написать в примере, чтобы упростить его.
Эндрю, я не думаю, что решение состоит в том, чтобы создать фабрику для создания другого объекта, который будет содержать IAM
членов + Сохранить. Я все еще думаю ... Есть еще идеи?