インターフェイスを実装するオブジェクトのリストと、そのインターフェイスのリストがあります。
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
ます。
これを行う方法はありますか?
Update#1:こんにちは、これまでの回答に感謝しますが、どれも私が必要としているものではありません。
インターフェイスはパブリックである必要があります。これは、dllの外部からのクライアントが使用する署名でありID
、他のプロパティとともに、例を単純にするためにわざわざ記述しなかったためです。
IAM
Andrew、解決策は、メンバー+保存を含む別のオブジェクトを作成するためのファクトリを作成することではないと思います。私はまだ考えています...他のアイデアはありますか?