只允许外部类实例化内部类,但内部类应该是公共的。

5
我在想在C#中是否可以实现以下功能:
public class Outer 
{
    public class Inner {}   

    public Inner CreateInner() 
    {   
        return new Inner(); // should only be allowed inside this method
    }
}

您只能在外部类方法中创建内部类的新实例。我想这样做是因为我需要更好地控制创建哪个内部类,并且它可以帮助我模拟CreateInner的返回值并验证它是否被调用。这种做法可行吗?


1
如果您将该类设置为私有,他就无法暴露它。 - Blue
1
我在谷歌上搜了很久,但不知何故找不到那篇重复的帖子。谢谢你。 - Mayron
1
我认为我们都曾经面临过同样的问题:答案存在,但我们没有正确的关键词。 - ProgrammingLlama
1个回答

5

将默认构造函数声明为私有的并不起作用,您可能已经发现了。

但是,您可以声明一个公共嵌套接口并返回该接口,然后使具体类完全私有。

像这样:

public class Outer
{
    public interface IInner
    {
        string SomeMethod();
    }

    class Inner: IInner
    {
        public string SomeMethod()
        {
            return "Hello, World!";
        }
    }

    public IInner CreateInner()
    {
        return new Inner(); // should only be allowed inside this method
    }
}

哦,当然!非常感谢 :) - Mayron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接