C#如何只将嵌套类的构造函数暴露给父类的成员?

时间:2017-04-13 08:39:17

标签: c#

基本上我想做的是

class Parent{    
    public class Nested {
        private Nested(){
            //do something
        }
        /* ??? */ Nested CreateNested(){
            return new Nested ();   
        }
    }

    public Nested Foo(){
        Nested n = (???).CreateNested ();
        // do something about n
        return n;
    }
}

以便Parent类的用户可以看到Nested类,但无法创建它(但是他们可以从Parent获取它)。我知道对于普通方法,您可以使用显式接口实现,但它似乎不适用于构造函数。

1 个答案:

答案 0 :(得分:3)

您只需返回INested,即可将嵌套类标记为private;因此,只有Parent可以访问该类。你最终得到这样的东西:

public class Parent
{
    public interface INested
    {
    }
    private class Nested : INested
    {
        public Nested()
        {
        }
    }

    public INested Foo()
    {
        Nested n = new Nested();
        // do something about n
        return n;
    }
}