3

我想知道是否可以在 c# 中执行以下操作:

public class Outer 
{
    public class Inner {}   

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

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

4

1 回答 1

4

正如您可能已经发现的那样,将默认构造函数设为私有是行不通的。

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

像这样的东西:

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
    }
}
于 2019-08-29T08:07:22.833 回答