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#,但是不应该有这样一个选项,即父类可以创建一个嵌套的类实例,但没有其他人不能.
到目前为止,我创建了一个解决方案,通过属性创建一个抽象类或接口,并实现一个在其他任何地方都无法使用的具体私有类.
这是处理这种情况的正确方法吗?
嵌入式类的工作方式是,它们作为外部类的成员,可以访问该外部类的私有成员。但反之则不然(你想要什么)。
您可以屏蔽 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)