我想要定义容器类和外部类可访问的嵌套类,但我想控制嵌套类的实例化,这样只有容器类的实例才能创建嵌套类的新实例.
诉讼代码应该有希望证明这一点:
public class Container { public class nested { public nested() { } } public nested Createnested() { return new nested(); // Allow } } class External { static void Main(string[] args) { Container containerObj = new Container(); Container.nested nestedobj; nestedobj = new Container.nested(); // Prevent nestedobj = containerObj.Createnested(); // Allow } }
嵌套必须是公共的,以便外部可以访问它.我尝试使用nested protected构造函数,但是这会阻止Container创建实例,因为Container不是nested的基类.我可以将nested的构造函数设置为internal,但我希望阻止所有外部类(包括同一程序集中的那些外部类)访问构造函数.有没有办法做到这一点?
如果无法通过访问修饰符实现这一点,我想知道是否可以在nested()中抛出异常.但是,我不知道如何测试调用新nested()的上下文.
解决方法
如何通过接口进行抽象?
public class Container { public interface Inested { /* members here */ } private class nested : Inested { public nested() { } } public Inested Createnested() { return new nested(); // Allow } } class External { static void Main(string[] args) { Container containerObj = new Container(); Container.Inested nestedobj; nestedobj = new Container.nested(); // Prevent nestedobj = containerObj.Createnested(); // Allow } }
您也可以使用抽象基类执行相同的操作:
public class Container { public abstract class nested { } private class nestedImpl : nested { } public nested Createnested() { return new nestedImpl(); // Allow } } class External { static void Main(string[] args) { Container containerObj = new Container(); Container.nested nestedobj; nestedobj = new Container.nested(); // Prevent nestedobj = containerObj.Createnested(); // Allow } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。