隐藏构造函数的嵌套类在c#中是不可能的?

luc*_*uke 8 c# language-features programming-languages

我最近做了一些编程,遇到了一个问题,我在c#中发现了一些奇怪的问题.(至少对于我来说)

public class Foo
{
    //whatever
    public class FooSpecificCollection : IList<Bar>
    {
         //implementation details
    }
    public FooSpecificCollection GetFoosStuff()
    {
         //return the collection
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望Foo的消费者能够获得对FooSpecificCollection的引用,甚至对它执行一些操作.甚至可能将它设置为Foo的其他属性或像这样的smth,但不能创建此类的实例.(应该能够实现此集合的唯一类应该是Foo.

我的要求真的那么牵强吗?我知道人们更明智地定义了c#,但是不应该有这样一个选项,即父类可以创建一个嵌套的类实例,但没有其他人不能.

到目前为止,我创建了一个解决方案,通过属性创建一个抽象类或接口,并实现一个在其他任何地方都无法使用的具体私有类.

这是处理这种情况的正确方法吗?

Hen*_*man 4

嵌入式类的工作方式是,它们作为外部类的成员,可以访问该外部类的私有成员。但反之则不然(你想要什么)。

您可以屏蔽 FooSpecificCollection 的构造函数,但工厂必须是 FooSpecificCollection 本身的一部分。它可以招募外部类:

public class Foo
{
    public class FooSpecificCollection : List<Bar>
    {
         private FooSpecificCollection ()   { }

         public static FooSpecificCollection GetFoosStuff()
         {
            var collection = new FooSpecificCollection ();
            PrepareFooSpecificCollection(collection);
            return collection;            
         }
    }

    private static void PrepareFooSpecificCollection(FooSpecificCollection collection)
    {
         //prepare the collection
    }
}
Run Code Online (Sandbox Code Playgroud)