【问题标题】:Allow only outer class to instantiate inner class but inner class should be public [duplicate]只允许外部类实例化内部类,但内部类应该是公共的[重复]
【发布时间】:2019-08-29 08:03:59
【问题描述】:

我想知道在 c# 中是否可以这样做:

public class Outer 
{
    public class Inner {}   

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

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

【问题讨论】:

  • @EhsanSajjad 如果您将课程设为私有,他将无法公开它。
  • 我在谷歌上搜索了很长时间,但由于某种原因,我找不到那个重复的帖子。谢谢你。
  • 我想我们都曾在某个时候面临同样的问题:答案存在,但我们没有正确的关键字。

标签: c# inner-classes


【解决方案1】:

将默认构造函数设为私有不起作用,您可能已经发现。

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

类似这样的:

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
    }
}

【讨论】:

  • 哦,当然!非常感谢:)
猜你喜欢
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
相关资源
最近更新 更多